添加隐藏字段以结帐并通过订单处理

Posted

技术标签:

【中文标题】添加隐藏字段以结帐并通过订单处理【英文标题】:Adding a hidden fields to checkout and process it through order 【发布时间】:2017-08-11 04:35:13 【问题描述】:

我想在结帐流程中添加一个只读(或不可见)且预先填写并固定在订单上的验证码。 客户需要此代码来验证订单。

我在 woocommerce_checkout_fields 过滤器的帐单字段中添加了一个自定义数组:

//VID
$fields['billing']['billing_vid'] = array( 
'label'     => __('', 'woocommerce'), 
'placeholder'   => _x('', 'placeholder', 'woocommerce'), 
'required'  => false,
'type'      => 'text', 
'class'     => array('form-row-wide'), 
'clear'     => false,
'default' => wp_rand(10000,99999)   
);

这可行,但客户仍然可以在结帐过程中在字段中写入内容。

有人可以帮我解决吗?

谢谢

【问题讨论】:

【参考方案1】:

更新 2增加了对 Woocommerce 3+ 的兼容性并删除了一些错误

正如您所期望的那样,这里可能是一个更完整的解决方案:

// Outputting the hidden field in checkout page
add_action( 'woocommerce_after_order_notes', 'add_custom_checkout_hidden_field' );
function add_custom_checkout_hidden_field( $checkout ) 

    // Generating the VID number
    $vid_number = wp_rand(10000,99999);

    // Output the hidden field
    echo '<div id="user_link_hidden_checkout_field">
            <input type="hidden" class="input-hidden" name="billing_vid" id="billing_vid" value="' . $vid_number . '">
    </div>';


// Saving the hidden field value in the order metadata
add_action( 'woocommerce_checkout_update_order_meta', 'save_custom_checkout_hidden_field' );
function save_custom_checkout_hidden_field( $order_id ) 
    if ( ! empty( $_POST['billing_vid'] ) ) 
        update_post_meta( $order_id, '_billing_vid', sanitize_text_field( $_POST['billing_vid'] ) );
    


// Displaying "Verification ID" in customer order
add_action( 'woocommerce_order_details_after_customer_details', 'display_verification_id_in_customer_order', 10 );
function display_verification_id_in_customer_order( $order ) 
    // compatibility with WC +3
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;

    echo '<p class="verification-id"><strong>'.__('Verification ID', 'woocommerce') . ':</strong> ' . get_post_meta( $order_id, '_billing_vid', true ) .'</p>';


 // Display "Verification ID" on Admin order edit page
add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_verification_id_in_admin_order_meta', 10, 1 );
function display_verification_id_in_admin_order_meta( $order ) 
    // compatibility with WC +3
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;
    echo '<p><strong>'.__('Verification ID', 'woocommerce').':</strong> ' . get_post_meta( $order_id, '_billing_vid', true ) . '</p>';


// Displaying "Verification ID" on email notifications
add_action('woocommerce_email_customer_details','add_verification_id_to_emails_notifications', 15, 4 );
function add_verification_id_to_emails_notifications( $order, $sent_to_admin, $plain_text, $email ) 
    // compatibility with WC +3
    $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;

    $output = '';
    $billing_vid = get_post_meta( $order_id, '_billing_vid', true );

    if ( !empty($billing_vid) )
        $output .= '<div><strong>' . __( "Verification ID:", "woocommerce" ) . '</strong> <span class="text">' . $billing_vid . '</span></div>';

    echo $output;

代码位于您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。

此代码已经过测试并且可以工作。

【讨论】:

真的非常感谢这个sn-p的代码

以上是关于添加隐藏字段以结帐并通过订单处理的主要内容,如果未能解决你的问题,请参考以下文章

php 结帐:隐藏订单备注#woo #hide

根据所选付款方式显示隐藏自定义 Woocommerce 结帐字段

根据取货和交付按钮显示或隐藏 WooCommerce 结帐字段

结帐字段:隐藏和显示现有字段

隐藏 WooCommerce 结帐字段后删除所需的验证

在 Woocommerce 中显示或隐藏两个结帐字段