首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联系表格7+ WooCommerce -按订单保存表单数据

联系表格7+ WooCommerce -按订单保存表单数据
EN

Stack Overflow用户
提问于 2016-11-15 13:23:07
回答 1查看 6.8K关注 0票数 0

我有以下问题:订单页面

我有一个联系表格7与2个下拉选项订购门票的活动,没有用户登记。这样做很好,但是它不会像包含的图像那样在woocommerce的" orders“页面中保存任何表单数据,这使得跟踪订单变得困难。在联系人表格的其他设置中,我有以下内容:

代码语言:javascript
复制
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的订单,但我需要客户的数据,如姓名,地址和电子邮件。不幸的是,我对这种类型的代码还没有效率,有人能把我推向正确的方向吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 15:02:21

首先,您可以在会话中保存您的CF7数据,以便稍后使用您的订单保存它们(考虑到此时还没有创建订单)。您可以使用在发送邮件时触发的wpcf7_mail_sent操作。请注意,以下所有代码都发生在您的主题functions.php中。

代码语言:javascript
复制
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会话类WC_Session

然后在处理订单时将数据保存在自定义字段中:

代码语言:javascript
复制
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中,以避免任何解码问题。

最后,您需要添加一个元盒来在订单页面上显示表单数据:

代码语言:javascript
复制
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');

然后显示数据:

代码语言:javascript
复制
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 />';
        }
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40610928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档