更新(自WooCommerce 3以来)
以下是用于国家(可选状态)的WooCommerce钩子和代码:
add_filter( 'default_checkout_billing_country', 'change_default_checkout_country_and_state' );
add_filter( 'default_checkout_shipping_country', 'change_default_checkout_country_and_state' );
add_filter( 'default_checkout_billing_state', 'change_default_checkout_country_and_state' );
add_filter( 'default_checkout_shipping_state', 'change_default_checkout_country_and_state' );
function change_default_checkout_country_and_state( $default ) {
return null;
}
add_filter( 'default_checkout_billing_country', '__return_null' );
add_filter( 'default_checkout_shipping_country', '__return_null' );
add_filter( 'default_checkout_billing_state', '__return_null' );
add_filter( 'default_checkout_shipping_state', '__return_null' );
代码放在当前子主题(或活动主题)的functions.php文件中。已经测试并且可用。
注意:
default_checkout_country
和default_checkout_state
钩子已经被弃用并替换为WooCommerce 3中的其他内容。
add_filter( 'default_checkout_billing_country', 'change_default_checkout_country', 10, 1 );
function change_default_checkout_country( $country ) {
// If the user already exists, don't override country
if ( WC()->customer->get_is_paying_customer() ) {
return $country;
}
return null;
}
Null
。我想告诉你,我已经解决了同样的问题。
我在这里写了一个小插件:https://github.com/TakesTheBiscuit/woocommerce_set_country
这里的主要用户体验修复是为用户提供一个选择框,让他们在进入购物车或结账之前就可以定制他们的会话体验,例如自定义定价、运费、税费等。
在编写插件的过程中,我还发现管理员(通常作为网站所有者登录)已经经常设置了国家,因此为了测试我们想要排除管理员的默认国家功能。
function change_default_checkout_country($country) {
if (current_user_can( 'manage_options' )) {
} else {
if ( WC()->customer->get_is_paying_customer() ) {
return $country;
}
}
$returnCountry = '';
if (strlen($_SESSION['wc_country_iso']) == 2) {
$returnCountry = $_SESSION['wc_country_iso'];
} else {
$countries_obj = new WC_Countries();
$returnCountry = $countries_obj->get_base_country();
}
return $returnCountry;
}
add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' , 10, 1 );
add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' );
function change_default_checkout_country() {
return 'UK'; // country code
这些功能已被弃用
add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' );
add_filter( 'default_checkout_billing_state', 'change_default_checkout_state' );
function change_default_checkout_country() {
return null;
//return get_user_meta( get_current_user_id() , 'billing_country', true ); // for retrun user saved country
}
function change_default_checkout_state() {
return null;
//return get_user_meta( get_current_user_id() , 'billing_state', true ); // for retrun user saved state
}
已在WooCommerce版本4.5.2中进行测试