Как сделать поле формы обязательным при оформлении заказа WooCommerce - PullRequest
0 голосов
/ 16 апреля 2019

В форме оформления заказа я создал поле выбора. У меня вопрос, как в 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>

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

1) Для обычных или настраиваемых полей выставления счетов и доставки вы можете использовать woocommerce_billing_fields или woocommerce_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 вашей активной дочерней темы (или активной темы).Проверено и работает.

enter image description here

enter image description here


2) В отдельных случаях вам нужноиспользовать фильтр woocommerce_default_address_fields.Этот фильтр применяется ко всем полям выставления счетов и доставки по умолчанию * ( см. Документацию ).Используются только некоторые поля проверки по умолчанию.

3) Вы также можете использовать woocommerce_checkout_fields с $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 Документация: Настройка полей оформления заказа с помощью действий и фильтров

0 голосов
/ 16 апреля 2019

вы можете добавить атрибут к тегу выбора

<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>
...