【问题标题】:Set user geolocated country as default in WooCommerce checkout page在 WooCommerce 结帐页面中将用户地理定位的国家/地区设置为默认值
【发布时间】:2020-08-20 02:44:58
【问题描述】:

我正在开发 WooCommerce 结帐页面。我可以使用 functions.php 文件中的过滤器为所有用户设置默认国家/地区。没关系。

但我需要根据登录和注销用户的位置在结帐页面中设置国家/地区名称。例如,如果用户来自美国,用户将在结帐页面的国家/地区下拉列表中看到美国被选中。如果用户来自加拿大,用户将在结帐页面中看到选择了加拿大的国家/地区下拉列表。

【问题讨论】:

  • 您可以通过 IP 或 GPS 查看地理定位来开始研究。两者都有可用的 wordpress/woocommerce 插件
  • 它有点棘手,但它是可行的。我已经为此分享了我的解决方案。

标签: php wordpress woocommerce geolocation checkout


【解决方案1】:

由于 Woocommerce 已经通过 WC_Geolocation 类包含一个地理定位 IP,这将允许您获取并将用户地理定位的国家/地区设置为默认结帐国家/地区。不需要任何额外的插件。

注意: WooCommerce 允许店主自动定位客户并显示特定于客户位置的税率和运输方式。为了确定客户的正确位置,从 3.9+ 版本开始,WooCommerce 使用与 MaxMind Geolocation 的集成 (并且完全免费可以获得GeoIP Lite 2 许可证).

见:MaxMind Geolocation Integration - Set a license key in WooCommerce

在结帐时将默认设置地理定位 IP 用户国家/地区的代码:

add_action( 'default_checkout_country' , 'set_user_geoip_country_as_default_checkout_country', 900 );
function set_user_geoip_country_as_default_checkout_country( $default_country ) {
    // Get an instance of the WC_Geolocation object class
    $geolocation     = new WC_Geolocation();
    // Get user IP
    $user_ip_address = $geolocation->get_ip_address();
    // Get user geolocated data.
    $user_geoip_data = $geolocation->geolocate_ip( $user_ip_address );

    if ( isset($user_geoip_data['country']) && ! empty($user_geoip_data['country']) ) {
        $default_country = $user_geoip_data['country']; // Set user geoIp country
    }

    return $default_country;
}

如果您想对 结帐状态字段 执行相同操作,您将另外使用以下内容:

add_action( 'default_checkout_state' , 'set_user_geoip_state_as_default_checkout_state' );
function set_user_geoip_state_as_default_checkout_state( $default_state ) {
    // Get an instance of the WC_Geolocation object class
    $geolocation     = new WC_Geolocation();
    // Get user IP
    $user_ip_address = $geolocation->get_ip_address();
    // Get user geolocated data.
    $user_geoip_data = $geolocation->geolocate_ip( $user_ip_address );

    if ( isset($user_geoip_data['state']) && ! empty($user_geoip_data['state']) ) {
        $default_state = $user_geoip_data['state']; // Set user geoIp State
    }
    return $default_state;
}

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

相关:

【讨论】:

    【解决方案2】:

    您设置使用此代码更改默认国家/地区。

    插入此代码之前要完成的步骤可以:

    1- 安装这个插件: https://wordpress.org/plugins/geoip-detect/

    2- 激活 GeoIP API(数据源):将为您返回位置的服务。您可以在插件设置中进行此操作。

    3- 将此代码插入function.php:

    add_filter( 'default_checkout_country', 'change_default_checkout_country' );
    function change_default_checkout_country() 
      return do_shoartcode('[geoip_detect2 property="country.isoCode"]');
    }
    

    !!!!没有插件,代码将无法工作,因为它使用的是该插件制作的短代码。

    但请记住,这适用于没有保存帐单地址的任何用户,因为 Woocommerce 会在默认国家/地区考虑它。

    【讨论】:

    • 您可以使用此代码更改结帐页面中显示的默认国家/地区,我的想法是您使用该插件获取国家/地区代码并在我的代码中使用它。但是您可以使用任何其他服务、解决方案或方法来获取国家/地区代码,并且您可以轻松地将其插入“do_shoartcode('[geoip_detect2 property="country.isoCode"]')”。让我知道是否可以提供更多帮助。
    • 这似乎会在单个任何用户访问页面时更改所有用户的默认位置。我不认为这是一个有利的解决方案,如果你将它与@LoicTheAztec 的问题结合起来,它会更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2019-04-07
    • 2018-05-05
    相关资源
    最近更新 更多