Я думал, что это будет легко, но я не получаю желаемых результатов. В основном у меня есть 2 страны в WooCommerce CA и США. Я пытаюсь удалить один условно, и я могу сделать это с помощью следующего кода ниже. Однако, когда я перехожу из 2 стран в 1, выпадающее меню по-прежнему появляется. Странная вещь, которую я также заметил в приведенном ниже коде, заключается в том, что, если я захожу в настройки Woocommerce, то страна, которая удаляется с помощью этого кода, также удаляется из опций «Продажа в определенные страны» …. не уверен, что происходит. Заранее спасибо.
add_filter( 'woocommerce_countries', 'custom_woocommerce_countries_limit');
function custom_woocommerce_countries_limit( $countries ) {
/*
will place a conditional here if x then remove country
*/
unset($countries['CA']);
$countries = array(
'US' => __( 'United States', 'woocommerce' )
);
return $countries;
}
РЕДАКТИРОВАТЬ: Использование этого крючка может быть близко к ответу, но когда я использую этот, состояния не превращаются в раскрывающийся список …?
add_filter( 'woocommerce_countries_allowed_countries', 'custom_woocommerce_countries_limit');
Ты можешь использовать woocommerce_countries_allowed_countries
фильтр ловушку, но вам нужен дополнительный код, чтобы поля состояния были выпадающими (выберите поле):
add_filter( 'woocommerce_countries_allowed_countries', 'filter_allowed_countries_conditionally');
function filter_allowed_countries_conditionally( $countries ) {
// will place a conditional here if x then remove country
if( true ) {
$countries = array( 'US' => __( 'United States', 'woocommerce' ) );
} else {
$countries = array( 'CA' => __( 'Canada', 'woocommerce' ) );
}
return $countries;
}
// Force billing state field type to be a dropdown
add_filter( 'woocommerce_billing_fields', 'filter_billing_state_fields', 100, 1 );
function filter_billing_state_fields( $fields ) {
$fields['billing_state']['type'] = 'state';
return $fields;
}
// Force shipping state field type to be a dropdown
add_filter( 'woocommerce_shipping_fields', 'filter_shipping_state_fields', 100, 1 );
function filter_shipping_state_fields( $fields ) {
$fields['shipping_state']['type'] = 'state';
return $fields;
}
Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.
Других решений пока нет …