简体   繁体   English

在Woocommerce中根据IP地址(GeoLocation)更改添加到购物车按钮

[英]Change add to cart button based on IP-adress (GeoLocation) in Woocommerce

I have a question about a WooCommerce shop I am currently working on. 我对目前正在工作的WooCommerce商店有疑问。 The shop only contains only two languages, Dutch and English. 该商店仅包含两种语言,荷兰语和英语。

Is it possible when somebody from Poland visits the English version of the webshop and then navigates to the WooCommerce Products page it does not show the "Add to Cart" option but displays a different button with another link based on IP-adres (Geo-Location)? 当波兰某人访问英语版本的网上商店,然后导航到WooCommerce产品页面时,它是否不显示“添加到购物车”选项,而是显示另一个按钮以及基于IP地址的另一个链接(地理位置), )?

EDIT 编辑

Ok, I managed to get it to work but not with your example: 好的,我设法使其正常工作,但不支持您的示例:

    // Wijzigingen Links en teksten knoppen toevoegen
function custom_product_button(){
    // GEOLocatie aanroepen en verschillende distrubiteurs toevoegen
    $geoip = geoip_detect2_get_info_from_current_ip();
    $country = $geoip->raw[ 'country' ][ 'iso_code' ];
    $button_text = __( "To distributor's website", "woocommerce" );
    $button_usa = 'https://google.com';
    $button_singapore = 'https://www.google.com.sg';

    // Tonen van buttons met verschillende linkjes
    ?>
    <form class="cart">
    <input type="submit" value="<?php echo $button_text; ?>" onClick="window.open('<?php if ( 'US' === $country )  {echo $button_usa;}if ( 'SG' === $country )  {echo $button_singapore;}?>');"class="single_add_to_cart_button button alt">
    </form>
    <?php
}

// Vervangen van de button op single product pagina
add_action( 'woocommerce_single_product_summary', 'replace_single_add_to_cart_button', 1 );
function replace_single_add_to_cart_button() {
    global $product;
      $geoip = geoip_detect2_get_info_from_current_ip();
      $country = $geoip->raw[ 'country' ][ 'iso_code' ];
      if ( 'US' === $country || 'SG' === $country)
      {
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
            add_action( 'woocommerce_single_product_summary', 'custom_product_button', 30 );
      }
}

// Vervangen van de button op loop pagina en categorie / archief pagina
add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart_button', 10, 2 );
function replace_loop_add_to_cart_button( $button, $product  ) {
      $geoip = geoip_detect2_get_info_from_current_ip();
      $country = $geoip->raw[ 'country' ][ 'iso_code' ];
      if ( 'US' === $country || 'SG' === $country)  {
        $button_text = __( "View product", "woocommerce" );
        $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>';
    }

    return $button;
}

Maybe not the best coded piece but it is working in combination with the Plug-in GeoIP Detection. 也许不是最好的编码片段,但它可以与Plug-in GeoIP Detection结合使用。

Your coding looks much better but doen't seem te work. 您的编码看起来好很多,但似乎没有用。 No errors just always the add to cart button. 没有错误,只是总是添加到购物车按钮。

Updated: on April 21th, 2018 更新时间: 2018年4月21日

Woocommerce has a geolocation enabled tool (and WC_Geolocation related class) by default . Woocommerce 默认情况下具有启用地理位置的工具(和WC_Geolocation相关的类)

The first below uses that geolocation in a custom conditional function, where you will defined the related countries that are going to enabled your demo button. 下面的第一个在自定义条件函数中使用该地理位置,您将在其中定义将要启用演示按钮的相关国家
In that function you will set all the related country codes in the array (I have defined 'US' and 'SG' just for testing purpose). 在该函数中,您将在阵列中设置所有相关的国家代码 (我仅出于测试目的定义了“ US”和“ SG”)。

The code: 编码:

// Updated: check for the defined country codes based over user IP geolocation country code
function country_geo_ip_check(){
    // ==> HERE define the countries codes in the array
    $non_allowed_countries = array('US', 'SG');

    // Get an instance of the WC_Geolocation object class
    $geolocation_instance = new WC_Geolocation();
    // Get user IP
    $user_ip_address = $geolocation_instance->get_ip_address();
    // Get geolocated user IP country code.
    $user_geolocation = $geolocation_instance->geolocate_ip( $user_ip_address );

    return in_array( $user_geolocation['country'], $non_allowed_countries ) ? false : true;
}

// Shop and other archives pages (replacing add to cart by a linked button to the product)
add_filter( 'woocommerce_loop_add_to_cart_link', 'replace_loop_add_to_cart_button', 10, 2 );
function replace_loop_add_to_cart_button( $button, $product  ) {
    if ( country_geo_ip_check() ) return $button;  // Exit for non defined countries

    if ( $product->is_type( 'variable' ) ) return $button; // Excluding variable products

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

// Single producct pages
add_action( 'woocommerce_single_product_summary', 'replace_single_add_to_cart_button', 1 );
function replace_single_add_to_cart_button() {
    global $product;

    if ( country_geo_ip_check() ) return;  // Exit for non defined countries

    // For variable product types (keeping attribute select fields)
    if( $product->is_type( 'variable' ) ) {
        remove_action( 'woocommerce_single_variation', 'woocommerce_single_variation_add_to_cart_button', 20 );
        add_action( 'woocommerce_single_product_summary', 'custom_demo_button', 20 );
    }
    // For all other product types
    else {
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
        add_action( 'woocommerce_single_product_summary', 'custom_demo_button', 30 );
    }
}

// Your custom button replacement
function custom_demo_button() {
    global $post, $product;

    $style = 'style="padding-right: 0.75em;padding-left: 0.75em;margin-left: 8px; background-color: #0ebc30;"';
    $button_text = __("View Demo", "woocommerce");

    // Get demo Url
    if( function_exists('get_field') )
        $url_demo = get_field( "url_demo" );

    if( ! isset($url_demo) ){ // If the Url is not defined
        $button_text = __("Missing URL", "woocommerce");
        $style = 'style="color: red; background-color: white; border: solid 1px red"';
        $url_demo = '#';
    }

    // Output
    echo '<a href="'.$url_demo.'" target="_blank" class="button demo_button"'.$style.'>'.$button_text.'</a>';
}

Code goes in function.php file of your active child theme (or active theme). 代码进入您的活动子主题(或活动主题)的function.php文件中。 Tested and work. 经过测试和工作。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何根据可用性更改WooCommerce添加到购物车按钮 - How to change WooCommerce Add to Cart Button based on Availability 根据Woocommerce中的父产品类别更改“添加到购物车”按钮文本 - Change Add To Cart button text based on parent product categories in Woocommerce 根据 WooCommerce 产品类型更改添加到购物车按钮和文本 - Change add to cart button and text based on WooCommerce product type WooCommerce 添加到购物车重定向基于点击的按钮 - WooCommerce add to cart redirect based on button clicked 在Woocommerce中单击后,将“添加到购物车”按钮更改为“查看购物车”按钮 - Change Add to Cart Button to View Cart Button after click in Woocommerce 删除Woocommerce中的“添加到购物车”通知并更改“添加到购物车”按钮 - Remove add to cart notice and change “add to cart” button in Woocommerce 当产品在 Woocommerce 的购物车中时,更改添加到购物车按钮样式 - Change add to cart button style when product is in cart in Woocommerce Woocommerce:购物车中已有物品时,更改“添加到购物车”按钮的颜色 - Woocommerce: Change “add to cart” button color when something is already in the cart 基于产品类型的 WooCommerce 的“添加到购物车”按钮旁边的自定义按钮 - Custom Button next to “ADD TO CART” button of WooCommerce based on Product Type Woocommerce-删除添加到购物车按钮功能并更改按钮文本 - Woocommerce - Remove add to cart button functionality and change button text
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM