ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-验证并保存Woocommerce中特定付款网关的其他结帐字段

2019-10-11 04:32:55  阅读:202  来源: 互联网

标签:orders php wordpress woocommerce payment-method


当客户选择BACS网关时,我需要显示一个文本输入字段,我希望将输入字段值附加到订单和电子邮件通知中.

我正在使用Additional field on checkout for specific payment gateway in Woocommerce答案代码,其中我已将选择字段更改为输入文本字段:

add_filter( 'woocommerce_gateway_description', 'gateway_bacs_custom_fields', 20, 2 );
function gateway_bacs_custom_fields( $description, $method_id ){
    //
     if( $method_id == 'bacs' ){

        ob_start(); // Start buffering

        echo '<div  class="bacs-fields" style="padding:10px 0;">';

        woocommerce_form_field( 'field_slug', array(
            'type'          => 'text',
            'label'         => __("Udfyld EAN", "woocommerce"),
            'class'         => array('form-row-wide'),
            'required'      => true,
                            ), '');
        echo '<div>';

        $description .= ob_get_clean(); // Append  buffered content
    }
    return $description;
}

它在显示该字段的结帐页面上运行良好.

但是输入的文本值不会保存到订单和电子邮件通知中.

如何在订单和电子邮件通知中保存并附加此输入的文本值?

解决方法:

由于您使用的答案代码只是在BACS付款说明下的结帐中显示一个字段,因此缺少很多步骤:

您需要(仅当选择了BACS付款方式时):

>验证字段
>将输入的值保存到订单中
>在收到的订单和订单视图(我的帐户)上显示字段值
>显示电子邮件通知的字段值
>在管理员编辑订单页面中显示字段值

因此,如您所见,您要问的是巨大的(太宽泛的),并且对于第3、4和5点还需要一个新的问题,在这里您需要说出要输出的位置(位置).

步骤1和2的所有代码:

add_filter( 'woocommerce_gateway_description', 'gateway_bacs_appended_custom_text_fields', 10, 2 );
function gateway_bacs_appended_custom_text_fields( $description, $payment_id ){
     if( $payment_id === 'bacs' ){

        ob_start(); // Start buffering

        echo '<div class="bacs-fields" style="padding:10px 0;">';

        woocommerce_form_field( 'udfyld_ean', array(
            'type'          => 'text',
            'label'         => __("Udfyld EAN", "woocommerce"),
            'class'         => array('form-row-wide'),
            'required'      => true,
        ), '');

        echo '<div>';

        $description .= ob_get_clean(); // Append  buffered content
    }
    return $description;
}


// Process the field (validation)
add_action('woocommerce_checkout_process', 'udfyld_ean_checkout_field_validation');
function udfyld_ean_checkout_field_validation() {
if ( $_POST['payment_method'] === 'bacs' && isset($_POST['udfyld_ean']) && empty($_POST['udfyld_ean']) )
    wc_add_notice( __( 'Please enter your "Udfyld EAN" number.' ), 'error' );
}

// Save "Udfyld EAN" number to the order as custom meta data
add_action('woocommerce_checkout_create_order', 'save_udfyld_ean_to_order_meta_data', 10, 4 );
function save_udfyld_ean_to_order_meta_data( $order, $data ) {
    if( $data['payment_method'] === 'bacs' && isset( $_POST['udfyld_ean'] ) ) {
        $order->update_meta_data( '_udfyld_ean', sanitize_text_field( $_POST['udfyld_ean'] ) );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中.测试和工作.

To get this custom field value from $order the WC_Order object you will use:

06001

Or from $order_id the order ID you can use WordPress get_post_meta() function:

06002

字段验证(对于BACS作为选定的付款方式):

enter image description here

输入的字段值将保存到订单元数据(wp_postmeta表中的phpMyAdmin视图):

enter image description here

标签:orders,php,wordpress,woocommerce,payment-method
来源: https://codeday.me/bug/20191011/1890083.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有