2016-11-15 70 views
0

我有以下问题表单数据:orders page联系表7 + WooCommerce - 保存订单

我有订购门票的事件,没有用户注册2个下拉选项的联系表7。这工作正常,但它不会保存woocommerce的“订单”页面中的任何表单数据,如包含的图像,这使得难以跟踪订单。在接触形式的额外的设置我有以下几点:

on_sent_ok: "switch(document.forms[0].elements["registration_type"].value){case "Normal Registration": location.replace('url/checkout-3/?clear-cart&add-to-cart=325&quantity=1');break;case "Presenter Registration": location.replace('url/checkout-3/?clear-cart&add-to-cart=327&quantity=1');break;};" 

其中在以Woocommerce插入顺序,但我需要一个像名字ADRESS和电子邮件太多的客户数据。不幸的是,我对这种类型的代码效率不高,任何人都可以让我朝正确的方向发展?

在此先感谢!

+0

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'); 

然后显示数据?你似乎从错误的结局中采取了这一点。请澄清你想达到的目标。 – vard

+0

CF7将表单数据保存在联系人表单数据库中,该数据库被要求稍后能够导出为CSV。 on_sent将该产品添加到woocommerce结帐中,然后使用也请求的线卡。缺少的步骤是从CF7保存字段数据并将其插入到woocommerce的订单概述中。 – AaronK

+0

我明白了。你基本上需要做的是钩住'wpcf7_mail_sent'来保存会话中的表单数据,然后在创建订单时使用'woocommerce_checkout_order_processed'动作将它们保存在自定义字段中,并使用元框将它们显示在订单页面上。如果你不知道如何继续,我会精心设计一个答案。 – vard

回答

1

首先,您可以在会话中保存您的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); 

这将保存所有在一个序列字符串CF7表单数据,存储在BASE64以避免任何解码问题。

最后,你需要添加一个meta box,以显示订单页面上的表单数据:为什么您使用CF7订购产品

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 />'; 
     } 
    } 
} 
+0

我该如何限制这种功能到一种形式? – FDI