Cambie el botón Agregar al carrito según la dirección IP (GeoLocation) en Woocommerce

Tengo una pregunta sobre una tienda de WooCommerce en la que estoy trabajando actualmente. La tienda solo contiene dos idiomas, holandés e inglés.

Es posible que cuando alguien de Polonia visite la versión en inglés de la tienda web y luego navegue a la página de Productos de WooCommerce, no muestre la opción “Agregar al carrito”, pero muestre un botón diferente con otro enlace basado en direcciones IP (ubicación geográfica). )?

EDITAR

Ok, logré que funcionara pero no con tu ejemplo:

// 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 ?>  <input type="submit" value="" onClick="window.open('');"class="single_add_to_cart_button button alt">  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 = 'get_permalink() . '">' . $button_text . ''; } return $button; } 

Tal vez no sea la mejor pieza codificada, pero funciona en combinación con la Detección de GeoIP enchufable.

Tu encoding se ve mucho mejor pero no parece que te funcione. No hay errores solo siempre el botón añadir al carrito.

Actualizado: el 21 de abril de 2018.

Woocommerce tiene una herramienta habilitada para geolocalización (y clase relacionada con WC_Geolocation ) de forma predeterminada .

El primero a continuación utiliza esa geolocalización en una función condicional personalizada, donde definirá los países relacionados que habilitarán su botón de demostración.
En esa función, configurará todos los códigos de país relacionados en la matriz (he definido ‘EE. UU.’ Y ‘SG’ solo para fines de prueba).

El código:

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

El código va en el archivo function.php de su tema secundario activo (o tema activo). Probado y trabajo.

introduzca la descripción de la imagen aquí