当 Woocommerce 上允许一个国家/地区时,将状态字段保留为下拉列表
Keep state field as a dropdown when one allowed country on Woocommerce
我认为这很容易,但我没有得到我想要的结果。基本上我在 woocommerce CA 和美国有 2 个国家。我正在尝试有条件地删除一个,我可以使用下面的代码来做到这一点。但是,当我从 2 个国家转到 1 个国家时,下拉菜单仍然出现。我还注意到以下代码的一件奇怪的事情是,如果我进入我的 Woocommerce 设置,那么使用此代码删除的国家/地区也会从 "Sell to specific countries" 选项中删除....不确定这是怎么回事。提前致谢。
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
过滤器挂钩,但您应该需要一些额外的代码来强制状态字段成为状态下拉列表 (select 字段):
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 文件。已测试并有效。
我认为这很容易,但我没有得到我想要的结果。基本上我在 woocommerce CA 和美国有 2 个国家。我正在尝试有条件地删除一个,我可以使用下面的代码来做到这一点。但是,当我从 2 个国家转到 1 个国家时,下拉菜单仍然出现。我还注意到以下代码的一件奇怪的事情是,如果我进入我的 Woocommerce 设置,那么使用此代码删除的国家/地区也会从 "Sell to specific countries" 选项中删除....不确定这是怎么回事。提前致谢。
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
过滤器挂钩,但您应该需要一些额外的代码来强制状态字段成为状态下拉列表 (select 字段):
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 文件。已测试并有效。