【发布时间】:2016-09-03 10:25:42
【问题描述】:
我在我的 Wordpress 网站中使用 WooCommerce。默认情况下,结帐页面上会填充客户的账单和运输详细信息。我希望默认情况下不会设置国家/地区。相反,即使用户已登录,它也会要求选择国家/地区。
有什么建议吗?我应该怎么做才能实现这一目标?
【问题讨论】:
标签: php wordpress woocommerce checkout country
我在我的 Wordpress 网站中使用 WooCommerce。默认情况下,结帐页面上会填充客户的账单和运输详细信息。我希望默认情况下不会设置国家/地区。相反,即使用户已登录,它也会要求选择国家/地区。
有什么建议吗?我应该怎么做才能实现这一目标?
【问题讨论】:
标签: php wordpress woocommerce checkout country
更新 (自 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 文件中。经过测试并且可以工作。
注意:自 WooCommerce 3 起,
default_checkout_country和default_checkout_state钩子已被弃用和替换
相关:WooCommerce: Set country by default in checkout page for unlogged users
【讨论】:
值得注意的是,实现此目的的最新方法可能始终可以在 Woocommerce 文档here 中查看。
还值得注意的是,删除现有(已登录)客户的默认国家/地区可能是不可取的。至少在允许客户拥有客户帐户的网站上。对于这些客户,地址字段将自动为他们填写,如果您删除所有用途的默认国家/地区,则他们的地址将被填写,但国家/地区将丢失。
考虑到这一点,截至 2022 年 1 月,我建议将此代码作为实现 OP 要求的有用方法:
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;
}
这与 WC 文档中传达的内容略有不同,该文档解决了如何更改默认国家/地区设置的问题。在本例中,我们将其设置为 Null。
【讨论】:
那些功能已经被贬值了
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 中测试
【讨论】:
我在functions.php 中使用了以下代码,但无法正常工作 大家有什么线索吗?
add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' );
function change_default_checkout_country() {
return 'UK'; // country code
【讨论】:
我只是想让你知道我已经解决了同样的问题。
我这里写了一个小插件: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 );
我最后的想法;令人沮丧的是,您还会发现运费计算器无法选择这些默认国家/地区,因此您也需要解决这个问题。
【讨论】: