Удалить определенные штаты страны на Woocommerce Checkout

Я пытаюсь найти способ удалить несколько штатов США из выпадающего списка «Штат» на странице оформления заказа в WooCommerce.

Список состояний:

  1. Гавайи
  2. Аляска
  3. Вооруженные силы (АА)
  4. Вооруженные силы (АЕ)
  5. Вооруженные силы (AP)

Что я делал до сих пор:
Я вручную удаляю их, как указано в этом ссылка на сайт. Но это не очень хороший способ, так как изменения перезаписываются при каждом обновлении WooCommerce.

Альтернативу я нашел:
По этой ссылке WooCommerce ограничить доставку штатов в зависимости от категории, есть способ задавать доставка указывает, если определенное условие выполнено.
Мне интересно, смогу ли я снята с охраны пять штатов. Это звучит более логично для меня, чем установка 50 штатов. Но, к сожалению, я не могу найти ничего полезного.

Есть идеи, что может быть возможным решением?

1

Решение

Самый простой способ — удалить их, используя специальный фильтр-хук. woocommerce_states сюда:

add_filter( 'woocommerce_states', 'custom_us_states', 10, 1 );
function custom_us_states( $states ) {
$non_allowed_us_states = array( 'AK', 'HI', 'AA', 'AE', 'AP');

// Loop through your non allowed us states and remove them
foreach( $non_allowed_us_states as $state_code ) {
if( isset($states['US'][$state_code]) )
unset( $states['US'][$state_code] );
}
return $states;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Затем вы можете добавить некоторые условия или создать страницу пользовательских настроек, как показано в темах ниже:

3

Другие решения

Лучший способ сделать это — использовать фильтр, добавьте этот фрагмент в ваши темы functions.php

/**
* Modify Woocommerce states array
*
* @param array $states, collection of all $states
* @return array $states, modified array.
*/
add_filter( 'woocommerce_states', function( $states ){
// Unset Hawaii
unset( $states['US']['HI'] );

return $states;
}, 999);

Вы можете сбросить любые состояния, как это.

1

По вопросам рекламы [email protected]