首先,您可以在會話中保存您的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 />';
}
}
}
:
然後顯示數據?你似乎從錯誤的結局中採取了這一點。請澄清你想達到的目標。 – vard
CF7將表單數據保存在聯繫人表單數據庫中,該數據庫被要求稍後能夠導出爲CSV。 on_sent將該產品添加到woocommerce結帳中,然後使用也請求的線卡。缺少的步驟是從CF7保存字段數據並將其插入到woocommerce的訂單概述中。 – AaronK
我明白了。你基本上需要做的是鉤住'wpcf7_mail_sent'來保存會話中的表單數據,然後在創建訂單時使用'woocommerce_checkout_order_processed'動作將它們保存在自定義字段中,並使用元框將它們顯示在訂單頁面上。如果你不知道如何繼續,我會精心設計一個答案。 – vard