2016-11-15 68 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