まず、CF7データをセッションに保存して、後で注文を保存することができます(この時点で注文がまだ作成されていないことを考慮してください)。メールが送信されたときにトリガされるアクションは、wpcf7_mail_sent
アクションを利用できます。 あなたのテーマfunctions.phpには、次のコードがすべて含まれています。
function wc_wpcf7_mail_sent_function($contact_form) {
$submission = WPCF7_Submission::get_instance();
if($submission) {
$posted_data = $submission->get_posted_data();
WC()->session->set('cf7_posted_data', $posted_data);
}
}
add_action('wpcf7_mail_sent', 'wc_wpcf7_mail_sent_function');
これはWoocommerce SessionクラスWC_Session
を使用しています。
そして、注文が処理されたカスタムフィールドにデータを保存します。
function wc_save_cf7_data_to_order($order_id) {
$posted_data = base64_encode(serialize(WC()->session->get('cf7_posted_data')));
if(!empty($posted_data)) {
add_post_meta($order_id, 'cf7_posted_data', $posted_data);
WC()->session->__unset('cf7_posted_data');
}
}
add_action('woocommerce_checkout_order_processed', 'wc_save_cf7_data_to_order', 10, 1);
これは、任意のデコードの問題を避けるために、BASE64に保存されているシリアル化された文字列内のすべてのCF7フォームデータを、保存されます。その後
function wc_add_meta_box() {
add_meta_box(
'order_tickets',
__('Contact form data', 'your-theme'),
'wc_print_order_cf7_data_callback'),
'shop_order'
);
}
add_action('add_meta_boxes', 'wc_add_meta_box');
データを表示:
最後、あなたは注文ページのフォームデータを表示するようにmeta boxを追加する必要が
public function print_order_tickets_callback($post) {
$posted_data = get_post_meta($post->ID, 'cf7_posted_data', true);
if(!empty($tickets)) {
$posted_data = unserialiaze(base64_decode($posted_data));
foreach($posted_data as $key => $data) {
echo '<b>', $key, ' : </b> ', $data, '<br />';
}
}
}
なぜあなたは、製品を注文するCF7を使うのですか?あなたは間違った終わりからこれを取っているようです。達成したいことを明確にしてください。 – vard
CF7は、後でCSVにエクスポートできるように要求されたフォームフォームDBにフォームデータを保存します。 on_sentは、woocommerceのチェックアウトに製品を追加し、要求されたワイヤカードを使用します。欠けているステップは、CF7からのフィールドデータを保存し、それをwoocommerceのオーダー概要に挿入することです。 – AaronK
私は参照してください。 'wpcf7_mail_sent'をフックしてセッションにフォームデータを保存し、注文が作成されたときに(' woocommerce_checkout_order_processed'アクションを使って)カスタムフィールドに保存し、メタボックスを使って注文ページに表示します。あなたが進める方法がわからないなら、私は答えを打ち明けます。 – vard