基于IP的发货位置(地理位置)

时间:2017-11-28 作者:Denise Pereira

我想将发货中的国家/地区限制为另一个地址,并将帐单(结帐)限制为用户IP地址位置。假设用户在美国,我只希望该国家显示为下拉国家列表下的选项,或禁用更改国家的选项。我该怎么做?提前谢谢。

1 个回复
SO网友:Greg36

首先,要使地理定位正常工作,请转到WooCommerce>状态并检查MaxMind GeoIP database 选项,如果有红色复选标记,请按照提供的说明下载数据库。

然后可以将此代码添加到主题中(在functions.php) 或将其添加为插件或code snippet 因为在更新主题时,主题中的更改可能会丢失。

function wpse_287199_woo_checkout_country( $fields ) {
    $geoData = WC_Geolocation::geolocate_ip();
    $countries = WC()->countries->get_countries();

    $fields[\'billing\'][\'billing_country\'] = array(
        \'type\' => \'select\',
        \'label\'     => __(\'Country\', \'woocommerce\'),
        \'options\' => array(
            $geoData[\'country\'] => $countries[$geoData[\'country\']]
        ),
        \'class\' => array(
            \'form-row-wide\',
            \'address-field\',
            \'update_totals_on_change\'
        )
    );

    $fields[\'shipping\'][\'shipping_country\'] = array(
        \'type\' => \'select\',
        \'label\'     => __(\'Country\', \'woocommerce\'),
        \'options\' => array(
            $geoData[\'country\'] => $countries[$geoData[\'country\']]
        ),
        \'class\' => array(
            \'form-row-wide\',
            \'address-field\',
            \'update_totals_on_change\'
        )
    );

    return $fields;
}
add_filter( \'woocommerce_checkout_fields\' , \'wpse_287199_woo_checkout_country\' );
此代码检查客户的IP地理位置并确定其所在国家,然后将其作为唯一选项用于装运和计费。

结束

相关推荐