Woocommerce требует полей


Ниже приведен код, который я использую, чтобы сделать поле Штатов обязательным для всех мест, но для конкретных стран, таких как Германия, оно все еще не является обязательным. Я хочу сделать его обязательным для всех.

add_filter( 'woocommerce_checkout_fields', 'custom_override_default_address_fields' );
function custom_override_default_address_fields($fields){
        $fields['billing']['state']['required'] = true;
        $fields['shipping']['state']['required'] = true;
    }
    return $fields;
}
2 3

2 ответа:

Я выяснил, что WordPress сам удаляет требуемое поле состояния во многих странах (например, в Кувейте), и его нельзя сделать требуемым с помощью,

   $fields['billing']['state']['required'] = true;
   $fields['shipping']['state']['required'] = true;

Что я сделал, я проверил размер входного значения в раскрывающемся списке состояние (когда пользователь нажимает кнопку заказа), и если значение было пустым, я показал ошибку.

function my_custom_checkout_field_process() {
    // You can make your own control here
    if ( ! $_POST[ 'billing_state' ] )
    {

        wc_add_notice( __('PLEASE SELECT A STATE' ), 'error' );
    }
}

Обратите внимание, что ваш код неверен, удалите лишнее '}'.

Используйте woocommerce_default_address_fields вместо woocommerce_checkout_fields:

add_filter('woocommerce_default_address_fields', 'custom_override_default_address_fields');

function custom_override_default_address_fields( $fields ) {
     $fields['state']['required'] = false;

     return $fields;
}

Если у вас есть другие фильтры, попробуйте добавить приоритет (приоритет 20 будет выполняться после кода с приоритетом 10):

add_filter('woocommerce_default_address_fields', 'custom_override_default_address_fields', 100);

И если вам действительно нужно использовать woocommerce_checkout_fields , то используйте billing_stateи shipping_state вместо state:

add_filter('woocommerce_checkout_fields', 'custom_override_checkout_fields');

function custom_override_checkout_fields( $fields ) {
  $fields['billing']['billing_state']['required'] = true;
  $fields['shipping']['shipping_state']['required'] = true;

  return $fields;
}