根据用户国家/地区和产品ID自定义ADD TO CART按钮

时间:2017-08-11 11:02:17

标签: php wordpress woocommerce product country

在我的WooCommerce商店,我有一些只在美国有售的产品,我想隐藏单一商品页面上的“添加到购物车”按钮,当地理位置找到除美国以外的任何国家/地区时。

如果是美国,请显示“添加到购物车”,如果不是美国,请隐藏“添加到购物车”按钮。

(P.S。我使用了一个插件,但它与其他插件的某些javascript冲突无效。)

1 个答案:

答案 0 :(得分:3)

当条件匹配时(特定产品ID和其他国家/地区),此代码将通过产品链接和单个产品页面中的自定义文本替换商店归档中的“添加到购物车”按钮。

  

您只需输入:

     
      
  • 第一个功能是所需的国家/地区代码...(适合您'美国'已经完成)
  •   
  • 第二个和第三个在数组中使用您的产品ID
  •   

以下是代码:

// Conditional function country code detection
// @argument $code (string): country code restriction
// @return boolean
if( ! function_exists('is_from_country_code') ){

    // ==> HERE below set your country code (Replace 'US' by yours)
    function is_from_country_code( $code = 'US' ){
        $location = new WC_Geolocation;
        $user_ip = $location->get_ip_address();
        $user_country_code = $location->geolocate_ip( $user_ip, false, false )['country'];
        return $user_country_code == $code ? true : false;
    }
}

// Replace "Add to cart" single product button and quantity by a custom text
add_action( 'woocommerce_single_product_summary', 'Custom_single_add_to_cart', 1 );
function Custom_single_add_to_cart(){
    global $product;

    // Set here your product IDS
    $product_ids = array( 56, 53, 50 );

    if( is_from_country_code() ||
         ( ! is_from_country_code() && ! in_array( $product->get_id(), $product_ids) ) )
        return; // Continue for foreign countries and the specific products IDs

    remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
    add_action('woocommerce_single_product_summary', function(){
        echo '<p class="custom-text">'.__('Not available for your country', 'woocommerce').'</p>';
    }, 30);
}

// Shop and archives pages: we replace the button add to cart by a link to the product
add_filter( 'woocommerce_loop_add_to_cart_link', 'custom_text_replace_button', 10, 2 );
function custom_text_replace_button( $button, $product  ) {

    // Set here your product IDS
    $product_ids = array( 56, 53, 50 );

    if( is_from_country_code() ||
         ( ! is_from_country_code() && ! in_array( $product->get_id(), $product_ids) ) )
        return $button; // Continue for foreign countries and the specific products IDs

    $button_text = __("View product", "woocommerce");
    return '<a class="button" href="'.$product->get_permalink().'">'.$button_text.'</a>';
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码在woocommerce 3+版本上测试并正常工作