繁体   English   中英

"如何在 WooCommerce 结帐中制作所需的表单字段"

[英]How to make a form field required in WooCommerce checkout

在结帐表单中,我创建了一个选择字段。 我的问题是如何在 Wordpress 或 Woocmmerce 中根据需要保留这个营地。

<p class="form-row form-row-wide validate-required validate-region" id="shipping_region_field" data-priority="6">

  <select name="shipping_region" id="shipping_region" class="state_select select2-selection--single" autocomplete="address-level1" data-placeholder="" tabindex="-1" aria-hidden="true">
        <option>Opción 01</option>
        <option>Opción 02</option>
  </select>
</p>

1) 对于正常或自定义计费和运输字段,您可以在结帐页面上使用woocommerce_billing_fieldswoocommerce_shipping_fields操作挂钩,如下所示。

它将需要一个自定义结帐字段,而无需添加验证脚本并将其保存在订单中。 该字段也将出现在我的帐户编辑地址字段部分。

一些论据解释:

  • 'update_totals_on_change'类允许在更改时触发“更新结帐”。
  • 'required'属性使该字段成为必填项
  • 'priority'属性允许您更改字段的位置。

代码:

add_filter( 'woocommerce_shipping_fields', 'display_shipping_region_checkout_field', 20, 1 );
function display_shipping_region_checkout_field( $fields ) {
    $fields['shipping_region'] = array(
        'type'        => 'select',
        'label'       => __("Region", "woocommerce") ,
        'class'       => array('form-row-wide', 'update_totals_on_change'),
        'required'    => true,
        'options'       => array(
            ''         => __("Choose a region please"),
            'option-1' => __("Option 01"),
            'option-2' => __("Option 02"),
            'option-3' => __("Option 03"),
        ),
        'priority' => 100, 
        'clear' => true,
    );
    return $fields;
}

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

在此处输入图像描述

在此处输入图像描述


2) 在特定情况下,您需要使用woocommerce_default_address_fields过滤器。 此过滤器适用于所有计费和运输默认字段 *( 请参阅文档)。 它仅使用一些默认结帐字段。

3)您还可以使用具有$fields作为函数参数的woocommerce_checkout_fields 请参阅文档

4) 对于其他自定义结帐字段,您可以将以下钩子之一与 woocommerce_form_field() 函数一起使用:

  • woocommerce_before_checkout_billing_form$checkout作为函数参数
  • woocommerce_before_checkout_billing_form$checkout作为函数参数
  • woocommerce_before_checkout_shipping_form$checkout作为函数参数
  • woocommerce_before_checkout_shipping_form$checkout作为函数参数
  • woocommerce_before_order_notes$checkout作为函数参数
  • woocommerce_after_order_notes$checkout作为函数参数

显示字段、验证字段并按顺序保存字段的代码:

// Display field
add_action( 'woocommerce_after_checkout_shipping_form', 'display_shipping_region_after_checkout_shipping_form', 10, 1 );
function display_shipping_region_after_checkout_shipping_form ( $checkout ) {

    woocommerce_form_field( 'shipping_region', array(
        'type'        => 'select',
        'label'       => __("Region", "woocommerce") ,
        'class'       => array('form-row-wide','update_totals_on_change'),
        'required'    => true,
        'options'       => array(
            ''         => __("Choose a region please"),
            'option-1' => __("Option 01"),
            'option-2' => __("Option 02"),
            'option-3' => __("Option 03"),
        ),
        'priority' => 100,
        'clear' => true,
    ), $checkout->get_value( 'shipping_region' ) );
}

// Field Validation
add_action('woocommerce_checkout_process', 'shipping_region_custom_checkout_field_validation');
function shipping_region_custom_checkout_field_validation() {
    if ( isset($_POST['shipping_region']) && empty($_POST['shipping_region']) )
        wc_add_notice( __( 'Please select something into Region field.' ), 'error' );
}

// Save Field value 
add_action( 'woocommerce_checkout_create_order', 'action_checkout_create_order_callback', 10, 2 );
function action_checkout_create_order_callback( $order, $data ) {
    if ( isset($_POST['shipping_region']) && empty($_POST['shipping_region']) ) {
        $order->update_meta_data( '_shipping_region', esc_attr($_POST['shipping_region']) );
        if( $order->get_user_id() > 0 )
            update_user_met( $order->get_user_id(), 'shipping_region', esc_attr($_POST['shipping_region']) );
    }
}

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


WooCommerce 文档: 使用操作和过滤器自定义结帐字段

您可以将属性添加到选择标签

<select required name="shipping_region" id="shipping_region" class="state_select select2-selection--single" autocomplete="address-level1" data-placeholder="" tabindex="-1" aria-hidden="true">
    <option>Opción 01</option>
    <option>Opción 02</option>
</select>
**If You Have Created Your Custom Field at the checkout page** 

add_action( 'woocommerce_after_checkout_validation', 'shipping_time_optionss', 9999, 2);
function shipping_time_optionss( $fields, $errors ){
    // if any validation errors
    if ( empty( $_POST['woo_shipping_time'] ) ) {
        $errors->add( 'woocommerce_password_error', __( 'Please Select Shipping Time Option.' ) );
    } 
} 
**

如果您在结帐页面创建了自定义字段

**

add_action( 'woocommerce_after_checkout_validation', 'shipping_time_optionss', 9999, 2);
function shipping_time_optionss( $fields, $errors ){
    // if any validation errors
    if ( empty( $_POST['woo_shipping_time'] ) ) {
        $errors->add( 'woocommerce_password_error', __( 'Please Select Shipping Time Option.' ) );
    } 
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM