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

bsxbgnwa  于 2022-10-24  发布在  WordPress
关注(0)|答案(5)|浏览(364)

我在我的WordPress网站上使用WooCommerce。默认情况下,结账页面上会填写客户的账单和送货详细信息。我希望国家不会被默认设置。相反,它将要求选择国家/地区,即使用户已登录。

有什么建议吗?我应该怎么做才能做到这一点呢?

azpvetkf

azpvetkf1#

更新(从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' );

代码放在活动子主题(或活动主题)的函数.php文件中。经过测试,效果良好。

**注意:**自WooCommerce 3起,default_checkout_countrydefault_checkout_state挂钩已弃用并被替换

相关:WooCommerce: Set country by default in checkout page for unlogged users

vulvrdjw

vulvrdjw2#

值得注意的是,实现这一目标的最新方法可能总是可以在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

pieyvz9o

pieyvz9o3#

这些功能已经折旧了。

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

34gzjxbg

34gzjxbg4#

我在unctions.php中使用了以下代码,它根本不起作用,有什么线索吗?

add_filter( 'default_checkout_billing_country', 'change_default_checkout_country' );

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

qvtsj1bj5#

我只是想让你知道,我已经解决了同样的问题。
我在这里写了一个小插件: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 );

我最后的想法是,您还会发现发货计算器无法计算这些默认的国家/地区,这很令人沮丧--所以您也需要解决这个问题。

相关问题