• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Деактивировать поле billing_city при выборе определенного региона в billing_state

dmitr

Новичок
Здравствуйте. Подскажите, пожалуйста, как при выборе региона (поле billing_state) г. Москва, поле населенный пункт (billing_city) сделать неактивным для заполнения?
 

Вложения

  • 1.png
    1.png
    198.9 KB · Просмотры: 8

DiZeR

Опытный
Местный
Хуком или плагином - аля YITH WooCommerce Checkout Manager (бесплатной версии должно хватить).

Оставьте то, что хотите убрать. Например: unset($fields['billing']['billing_state']);
PHP:
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {
     unset($fields['billing']['billing_postcode']);
     unset($fields['billing']['billing_country']);
     unset($fields['billing']['billing_state']);
     unset($fields['billing']['billing_email']);
     unset($fields['billing']['billing_company']);
     unset($fields['billing']['billing_address_2']);
   
     unset($fields['shipping']['shipping_postcode']);
     unset($fields['shipping']['shipping_country']);
     unset($fields['shipping']['shipping_state']);
     unset($fields['shipping']['shipping_email']);
     unset($fields['shipping']['shipping_company']);
     unset($fields['shipping']['shipping_address_2']);

     return $fields;
}
 

dmitr

Новичок
Хуком или плагином - аля YITH WooCommerce Checkout Manager (бесплатной версии должно хватить).

Оставьте то, что хотите убрать. Например: unset($fields['billing']['billing_state']);
PHP:
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

function custom_override_checkout_fields( $fields ) {
     unset($fields['billing']['billing_postcode']);
     unset($fields['billing']['billing_country']);
     unset($fields['billing']['billing_state']);
     unset($fields['billing']['billing_email']);
     unset($fields['billing']['billing_company']);
     unset($fields['billing']['billing_address_2']);
  
     unset($fields['shipping']['shipping_postcode']);
     unset($fields['shipping']['shipping_country']);
     unset($fields['shipping']['shipping_state']);
     unset($fields['shipping']['shipping_email']);
     unset($fields['shipping']['shipping_company']);
     unset($fields['shipping']['shipping_address_2']);

     return $fields;
}

Спасибо за хук) Но мне нужно не удалить поле, как таковое. У меня в поле state - список регионов РФ. При выборе, например, какого-либо региона, допустим, Владимирской области, в поле city нужно вписать еще и город из этой области (для доставки). Но если из списка был бы выбран регион - Москва, то в поле city уже нет смысла вписывать еще раз Москва (уже сам по себе регион). Но так как поле city required, то необходимо еще раз вписать Москва в поле city. Может, есть готовый код, который делает поле city неактивным (или false) при выборе конкретного региона из поля state...
 

DiZeR

Опытный
Местный
Спасибо за хук) Но мне нужно не удалить поле, как таковое. У меня в поле state - список регионов РФ. При выборе, например, какого-либо региона, допустим, Владимирской области, в поле city нужно вписать еще и город из этой области (для доставки). Но если из списка был бы выбран регион - Москва, то в поле city уже нет смысла вписывать еще раз Москва (уже сам по себе регион). Но так как поле city required, то необходимо еще раз вписать Москва в поле city. Может, есть готовый код, который делает поле city неактивным (или false) при выборе конкретного региона из поля state...
Любым бесплатным плагином аля "Checkout Manager " можно сделать поле billing_state необязательным для заполнения. А если необходима логика при выборе параметров, рассматривайте платные плагины.

Если делать хуком (необязательное поле), принцип такой же:
Код:
function custom_my_fields($fields) {
    
    $fields["billing"]["billing_last_name"]["required"] = false; // Фамилия не обязательна
    $fields["billing"]["billing_phone"]["required"] = true; // Телефон обязателен

    return $fields;
 
}

add_filter("woocommerce_checkout_fields", "custom_my_fields");
 

dmitr

Новичок
Любым бесплатным плагином аля "Checkout Manager " можно сделать поле billing_state необязательным для заполнения. А если необходима логика при выборе параметров, рассматривайте платные плагины.

Если делать хуком (необязательное поле), принцип такой же:
Код:
function custom_my_fields($fields) {
   
    $fields["billing"]["billing_last_name"]["required"] = false; // Фамилия не обязательна
    $fields["billing"]["billing_phone"]["required"] = true; // Телефон обязателен

    return $fields;

}

add_filter("woocommerce_checkout_fields", "custom_my_fields");

Спасибо, но я предпочитаю не пользоваться плагинами.
Я сделал то, что мне надо было.
Если кому-то это будет полезно, то вот:

add_action( 'woocommerce_after_checkout_form', 'hide_show_city', 5);

function hide_show_city() {

?>
<script type="text/javascript">
jQuery('select#billing_state').live('change', function(){

var state = jQuery('select#billing_state').val();

var check_state = new Array(<?php echo '"MSK"'; ?>);
if (state && jQuery.inArray( state, check_state ) >= 0) {
jQuery('#billing_city_field').fadeOut();
} else {
jQuery('#billing_city_field').fadeIn();
jQuery('#billing_city_field input').val('');
}

});
</script>
<?php
}
 
Сверху Снизу