在Woocommerce中根据IP地址(GeoLocation)更改添加到购物车按钮 [英] Change add to cart button based on IP-adress (GeoLocation) in Woocommerce

查看:186
本文介绍了在Woocommerce中根据IP地址(GeoLocation)更改添加到购物车按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对我目前正在工作的WooCommerce商店有疑问.该商店仅包含荷兰语和英语两种语言.

I have a question about a WooCommerce shop I am currently working on. The shop only contains only two languages, Dutch and English.

当波兰某人访问英语版本的网上商店,然后导航到WooCommerce产品页面时,它是否不显示添加到购物车"选项,而是显示另一个按钮以及基于IP地址的另一个链接(是否可以)?地理位置)?

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)?

编辑

好吧,我设法使其正常运行,但不支持您的示例:

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;
}

也许不是最好的编码片段,但它可与Plug-in GeoIP Detection结合使用.

Maybe not the best coded piece but it is working in combination with the Plug-in GeoIP Detection.

您的编码看起来好多了,但似乎没用.总是添加到购物车按钮不会出错.

Your coding looks much better but doen't seem te work. No errors just always the add to cart button.

推荐答案

更新:2018年4月21日

Updated: on April 21th, 2018

Woocommerce具有启用地理位置的工具(和WC_Geolocation相关类)默认情况下为 .

Woocommerce has a geolocation enabled tool (and WC_Geolocation related class) by default.

下面的第一个在自定义条件函数中使用该地理位置,您将在其中定义要启用演示按钮的相关国家.
在该功能中,您将在数组中设置所有相关的国家/地区代码(我为测试目的已定义了"US"和"SG").

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).

代码:

// 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>';
}

代码进入您的活动子主题(或活动主题)的function.php文件中.经过测试和工作.

Code goes in function.php file of your active child theme (or active theme). Tested and work.

这篇关于在Woocommerce中根据IP地址(GeoLocation)更改添加到购物车按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆