避免访问基于 WooCommerce 地理定位国家/地区的特定产品

Posted

技术标签:

【中文标题】避免访问基于 WooCommerce 地理定位国家/地区的特定产品【英文标题】:Avoid accessing specific products based on WooCommerce geolocated country 【发布时间】:2021-02-27 10:11:11 【问题描述】:

通过下面的代码,我可以使用 WooCommerce WC_Geolocation 类隐藏特定国家/地区的特定产品:

add_action( 'woocommerce_product_query', 'bbloomer_hide_product_if_country_new', 9999, 2 );
function bbloomer_hide_product_if_country_new( $q, $query ) 
    if ( is_admin() ) return;
    $location = WC_Geolocation::geolocate_ip();
    $hide_products = array( 17550, 32 );   
    $country = $location['country'];   
    if ( $country === "US" ) 
        $q->set( 'post__not_in', $hide_products );
     

代码运行良好,并根据商店/类别中的地理定位国家/地区隐藏产品,并在前端搜索结果。

但如果有人使用直接链接,产品仍然可见。如何避免客户也直接访问特定的单品页面?

【问题讨论】:

【参考方案1】:

将所有代码替换为以下内容:

// Conditional custom function: check for geolocated countries (array)
function is_targeted_geo_country( $countries ) 
    $location = WC_Geolocation::geolocate_ip();
    return in_array( $location['country'], $countries );


// Hide specific products from catalog
add_action( 'woocommerce_product_query', 'hide_product_for_geo_countries', 9999, 2 );
function hide_product_for_geo_countries( $q, $query ) 
    if ( is_admin() ) return;

    $product_ids = array( 17550, 32 );  // Here set the product to hide  
  
    if ( is_targeted_geo_country( array('US') ) ) 
        $q->set( 'post__not_in', $hide_products );
     


// Avoid accessing specific products, redirecting to shop
add_action( 'template_redirect', 'redirect_to_shop_products_for_geo_countries' );
function redirect_to_shop_products_for_geo_countries() 
    $product_ids = array( 17550, 32 );  // Here set the products to hide  
  
    if ( is_targeted_geo_country( array('US') ) && in_array( get_the_ID(), $product_ids ) ) 
        wp_safe_redirect( get_permalink( wc_get_page_id( 'shop' ) ) );
        exit();
     

【讨论】:

先生,代码的第三部分不起作用,它说重定向太多次。 @HannahJames 抱歉,我忘记了一些事情。更新。如果这个答案回答了你的问题,你可以请accept回答,如果你喜欢/想要你也可以请upvote回答,谢谢。

以上是关于避免访问基于 WooCommerce 地理定位国家/地区的特定产品的主要内容,如果未能解决你的问题,请参考以下文章

在 Woocommerce 3 中获取用户地理定位的国家/地区名称

WooCommerce 中特定运输类别、最低金额和地理定位国家/地区的购物车消息

WooCommerce 中多个国家/地区的基于地理位置的自定义重定向

如何在 woocommerce 商店的下拉列表中获取并自动显示访问者的地理位置数据(国家/地区)

在 Woocommerce 3 中获取地理位置的国家和地区

基于地理位置的 Woocommerce Shipping 通知