WooCommerce:在结帐页面中默认设置国家/地区

WooCommerce: Set country by default in checkout page

我在我的 Wordpress 网站中使用 WooCommerce。结帐页面默认填充客户账单和运输详细信息。我希望国家不会被默认设置。相反,即使用户已登录,它也会询问 select 国家。

有什么建议吗?我应该怎么做才能实现这一目标?

更新 (自 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 文件。已测试并有效。

Note: default_checkout_country and default_checkout_state hooks are deprecated and replaced since WooCommerce 3

相关:

那些功能已经贬值

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 中测试

I used the following code in functions.php which is not working at all, any clues please?

add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' );

function change_default_checkout_country() {
  return 'UK'; // country code

值得注意的是,在 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.

我只是想让你知道我已经解决了同样的问题。

我在这里写了一个小插件:https://github.com/TakesTheBiscuit/woocommerce_set_country

此处主要的用户体验修复是在用户进入购物车或结帐之前向他们提供一个select框 - 这样您就可以定制您的用户体验其他地方的 session - 例如自定义定价、运费、税收等

在编写插件时,我还发现管理员(您通常以网站所有者身份登录)通常已经设置了国家/地区,因此为了测试功能,我们希望将管理员排除在默认国家/地区之外。

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 );

我的最后想法;您还会发现运费计算器无法选择这些默认国家/地区,这令人沮丧 - 因此您也需要解决这个问题。