Wordpress 联系方式7和x2B;WooCommerce-在订单中保存表单数据

Wordpress 联系方式7和x2B;WooCommerce-在订单中保存表单数据,wordpress,woocommerce,contact-form-7,Wordpress,Woocommerce,Contact Form 7,我有以下问题: 我有一个联系人表格7,有两个下拉选项,用于订购活动门票,无需用户注册。这很好,但它不会像包含的图像那样在woocommerce的“订单”页面中保存任何表单数据,这使得跟踪订单变得困难。在联系人表单的其他设置中,我有以下内容: on_sent_ok: "switch(document.forms[0].elements["registration_type"].value){case "Normal Registration": location.replace('url/chec

我有以下问题:

我有一个联系人表格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,但我也需要客户数据,如姓名、地址和电子邮件。不幸的是,我还不能很好地处理这类代码,有人能帮我找到正确的方向吗


提前谢谢

首先,您可以在会话中保存CF7数据,以便稍后与订单一起保存(考虑到此时尚未创建订单)。您可以使用发送邮件时触发的
wpcf7\u mail\u sent
操作。请注意,以下所有代码都发生在theme functions.php中

这将使用Woocommerce会话类

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

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中,以避免任何解码问题

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

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');
然后显示数据:

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 />';
        }
    }
}
公共函数打印\订单\票据\回调($post){
$posted_data=get_post_meta($post->ID,'cf7_posted_data',true);
如果(!空($tickets)){
$posted_data=unseriaze(base64_decode($posted_data));
foreach($key=>$data作为$key发布的数据){
回显“”,$key':',$data'
; } } }
首先,您可以在会话中保存CF7数据,以便稍后与订单一起保存(考虑到此时尚未创建订单)。您可以使用发送邮件时触发的
wpcf7\u mail\u sent
操作。请注意,以下所有代码都发生在theme functions.php中

这将使用Woocommerce会话类

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

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中,以避免任何解码问题

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

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');
然后显示数据:

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 />';
        }
    }
}
公共函数打印\订单\票据\回调($post){
$posted_data=get_post_meta($post->ID,'cf7_posted_data',true);
如果(!空($tickets)){
$posted_data=unseriaze(base64_decode($posted_data));
foreach($key=>$data作为$key发布的数据){
回显“”,$key':',$data'
; } } }
为什么使用CF7订购产品?你似乎从错误的角度来看待这件事。请澄清您想要实现的目标。CF7将表单数据保存在Contact form DB中,该数据库被要求稍后能够导出到CSV。on_sent将产品添加到woocommerce结帐中,然后使用同样请求的wirecard。缺少的步骤是保存CF7中的字段数据并将其插入woocommerce的订单概述中。我明白了。基本上,您需要做的是挂接
wpcf7\u mail\u sent
以在会话中保存表单数据,然后在创建订单时(使用
woocommerce\u checkout\u order\u processed
action)将其保存在自定义字段中,并使用元框在订单页面上显示。如果您不知道如何继续,我将给出一个答案。如果您能详细说明并展示一个示例代码以及在何处实现它,那就太好了。这根本不是我的强项,谢谢你的帮助!为什么使用CF7订购产品?你似乎从错误的角度来看待这件事。请澄清您想要实现的目标。CF7将表单数据保存在Contact form DB中,该数据库被要求稍后能够导出到CSV。on_sent将产品添加到woocommerce结帐中,然后使用同样请求的wirecard。缺少的步骤是保存CF7中的字段数据并将其插入woocommerce的订单概述中。我明白了。基本上,您需要做的是挂接
wpcf7\u mail\u sent
以在会话中保存表单数据,然后在创建订单时(使用
woocommerce\u checkout\u order\u processed
action)将其保存在自定义字段中,并使用元框在订单页面上显示。如果您不知道如何继续,我将给出一个答案。如果您能详细说明并展示一个示例代码以及在何处实现它,那就太好了。这根本不是我的强项,谢谢你的帮助!如何将此功能限制为一个表单?@FDI有点晚了,但是如果
$posted\u data
中有表单的字段键,您可以检查其中的数据(可能使用隐藏的输入表单,例如“save\u in\u session”字段)。您的代码存在一些问题-“wc\u print\u order\u cf7\u data\u callback”(wc\u打印顺序数据回调)中有一个流氓)。wordpress不喜欢公共功能。我在表单上尝试了代码,表单仍在提交中。如何将此功能限制为一个表单?@FDI有点晚,但如果
$posted\u data
中有表单的字段键,您可以检查其中的数据(可能使用隐藏的输入表单,如“save\u in\u session”字段)。您的代码存在一些问题—“wc\u print\u order\u cf7\u data\u callback”),具有恶意代码)。wordpress不喜欢公共功能。我在表单上尝试了代码,表单在提交时挂起