Php 仅显示特定客户的价格';吴国的商业

Php 仅显示特定客户的价格';吴国的商业,php,wordpress,woocommerce,geolocation,price,Php,Wordpress,Woocommerce,Geolocation,Price,我已经使用woocommerce开发了一个目录,但是我需要能够隐藏产品价格,以防由于我无法控制的原因而从英国以外的用户访问该网站 我发现了一些插件,它们允许我根据访问者的位置改变产品价格,但没有任何东西允许我隐藏价格 有没有我错过的插件,或者我可以在woocommerce文件中添加什么来实现这一点 以下内容将根据客户地理位置所在国隐藏英国境外的价格: add_filter( 'woocommerce_get_price_html', 'country_geolocated_based_hide_

我已经使用woocommerce开发了一个目录,但是我需要能够隐藏产品价格,以防由于我无法控制的原因而从英国以外的用户访问该网站

我发现了一些插件,它们允许我根据访问者的位置改变产品价格,但没有任何东西允许我隐藏价格


有没有我错过的插件,或者我可以在woocommerce文件中添加什么来实现这一点

以下内容将根据客户地理位置所在国隐藏英国境外的价格:

add_filter( 'woocommerce_get_price_html', 'country_geolocated_based_hide_price', 10, 2 );
function country_geolocated_based_hide_price( $price, $product ) {
    // Get an instance of the WC_Geolocation object class
    $geo_instance  = new WC_Geolocation();
    // Get geolocated user geo data.
    $user_geodata = $geo_instance->geolocate_ip();
    // Get current user GeoIP Country
    $country = $user_geodata['country'];

    return $country !== 'GB' ? '' : $price;
}
代码进入活动子主题(或活动主题)的function.php文件。测试和工作


如果要仅为未标记的客户启用该地理定位功能,请使用以下命令:

add_filter( 'woocommerce_get_price_html', 'country_geolocated_based_hide_price', 10, 2 );
function country_geolocated_based_hide_price( $price, $product ) {
    if( get_current_user_id() > 0 ) {
        $country = WC()->customer->get_billing_country();
    } else {
        // Get an instance of the WC_Geolocation object class
        $geo_instance  = new WC_Geolocation();
        // Get geolocated user geo data.
        $user_geodata = $geo_instance->geolocate_ip();
        // Get current user GeoIP Country
        $country = $user_geodata['country'];
    }
    return $country !== 'GB' ? '' : $price;
}
此代码的更新版本可用于避免后端错误

我在启动时的功能中添加了:

if ( is admin() ) return $price;

代码进入活动子主题(或活动主题)的function.php文件。经过测试,可以正常工作。

有各种web API可以帮助您。比如说


如果必须进行多次检查,则本地数据库更好。MaxMind提供了一个可用于各种PHP库的功能,包括。

只需隐藏价格或使其无法购买?它们已准备好无法购买,我为此使用了一个目录插件,我只需现在隐藏价格,如果访问者不在英国,谢谢,在实现此功能时,我还需要采取其他步骤吗?由于实施此功能,我的所有价格都已被删除,尽管我本人在英国。谢谢,我尝试了您发布的两种解决方案,并且都在所有位置隐藏价格,我在Woocommerce设置中设置了“地理定位”,我想这是对的?我刚刚进行了测试,该解决方案在目录页面上运行良好,但是,当我导航到单个产品页面时,价格仍然显示?是否有其他标识符需要添加到目标价格元素以及目录页面上的标识符?@Marcus我已经在所有woocommerce默认产品类型(甚至是可变产品、可预订产品和订阅)上测试了此代码所有的价格都隐藏在所有目录档案页面和单一产品页面上。因此,您或您的主题或插件所做的一些定制正在制造麻烦。我刚刚发现一个bug:*致命错误:未捕获错误:调用成员函数get\u billing\u country()在/var/sites/o/oxfordriderwear.com/public_html/wp content/themes/storefront/functions.php:61堆栈跟踪:#0/var/sites/o/oxfordriderwear.com/public_html/…**在my admin Area for info的“产品”选项卡上,Woocommerce的核心已经具备了强大的地理定位功能:
WC\u geolocation()
类和方法……因此不需要任何外部功能。
ip = $_SERVER['REMOTE_ADDR']; 
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}")); 
echo $details->country; // -> "US"