• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar a la barra lateral principal

DecodeCMS

Tu WordPress a otro Nivel ...

  • Acerca de
  • Contacto
  • Inicio
  • Tutoriales
    • Themes
    • Plugins
    • Core
    • Recursos
  • Cursos
  • Acceder
    • Mis cursos
    • Mi Cuenta
    • Acceder
Inicio / Tutoriales / Plugins / Restringir productos por país en WooCommerce a través de código

Restringir productos por país en WooCommerce a través de código

Restringir productos por país en WooCommerce a través de código

[ hace 4 meses ] [ Autor: Jhon Marreros Guzmán ][ Plugins - Avanzado] [ ]

funcionalidad woocommerce

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

En un artículo anterior habíamos visto cómo habilitar la Geolocalización en WooCommerce, esta funcionalidad también nos servirá para comprobar si un producto puede mostrarse o no a través de código.

 

Resultado Final

Al final obtendremos algo similar a la siguiente imagen en el detalle de producto, en donde se ha ocultado el botón de añadir al carrito y se muestra un mensaje de restricción por país.

Mensaje detalle de producto, restricción por país

 

Código de funciones generales

Las siguientes funciones permiten establecer los códigos de productos por país y la detección del país actual del usuario que visita el sitio. Hay que tener en cuenta que se tiene que tener activa la Geolocalización de WooCommerce.

function get_countries_products() {
    return [
        'PE' => [24,25],
        'US' => [25]
    ];    
}

function get_current_country(){
    $location = [];
    if ( class_exists( 'WC_Geolocation' ) ){
        $location = WC_Geolocation::geolocate_ip();    
    }
    return $location['country'] ?? false;
}


function get_country_products(){
    $id_products = get_countries_products();
    return $id_products[get_current_country()] ?? false;
}
  • En la función get_countries_products() guardaremos un array asociativo con el código internacional del país y los IDs de los productos
  • La función get_current_country() obtiene el país actual desde donde se conecta el usuario, usamos la funcionalidad de Geolocalización de WooCommerce para esto
  • La función get_country_products() obtiene los productos para el país actual

 

Mensaje restricción por país en la página de producto

Mostraremos un mensaje si el producto no esta disponible para un país específico con el siguiente código:

add_action('woocommerce_before_add_to_cart_form', 'dcms_show_message_restrict_country');
function dcms_show_message_restrict_country(){
    global $product;

    if ( is_product() ) {
        $current_product = $product->get_id();
        $id_products = get_country_products();
        
        if ( $id_products && ! in_array($current_product, $id_products) ){
            echo "<div class='msg-restrict-country'>Este producto no esta disponible en tu país</div>";
        }
    }    
}
  • Para mostrar un mensaje en el detalle de producto usamos el hook woocommerce_before_add_to_cart_form que hace referencia a la función dcms_show_message_restrict_country()
  • Dentro de la función comprobamos si estamos en la página de producto y usando las funciones anteriores mostramos o no un mensaje

 
También usaremos el siguiente código CSS para darle un diseño al mensaje y ocultar el botón de añadir al carrito.

.msg-restrict-country{
    background-color:coral;
    color:white;
    text-transform: uppercase;
    padding:5px;
    text-align: center;
    margin:20px auto;
}
  
.msg-restrict-country + form.cart{
    display: none;
}

 

Sólo mostrar los productos asignados por país

Si te interesa mostrar sólo los productos asignados en la función get_current_country(), puedes evaluar el siguiente código que modifica la lista de productos.

add_action('woocommerce_product_query', 'dcms_modify_query_products');
function dcms_modify_query_products($query) {
    $id_products = get_country_products();

    if ( $id_products  ){
        $query->set( 'post__in', $id_products );
    }
}
  • Usamos el hook woocommerce_product_query, que hace referencia a la función dcms_modify_query_products()
  • Dentro de la función obtenemos los Ids de los productos asignados para el país actual
  • Si existen asignaciones entonces restringimos la consulta

 

Haciendo negaciones al código

En lugar de que los productos asignados en la función get_countries_products() sean los productos permitidos, podemos hacer que sean los productos restringidos.

Para el detalle de producto, lo haremos cambiando la negación en la condición de la función in_array():

add_action('woocommerce_before_add_to_cart_form', 'dcms_show_message_restrict_country');
function dcms_show_message_restrict_country(){
    global $product;

    if ( is_product() ) {
        $current_product = $product->get_id();
        $id_products = get_country_products();
        
        if ( $id_products && in_array($current_product, $id_products) ){
            echo "<div class='msg-restrict-country'>Este producto no esta disponible en tu país</div>";
        }
    }    
}

 
Para el listado de productos cambiamos ‘post__in’, por ‘post__not_in’, es decir el código quedaría:

add_action('woocommerce_product_query', 'dcms_modify_query_products');
function dcms_modify_query_products($query) {
    $id_products = get_country_products();

    if ( $id_products  ){
        $query->set( 'post__not_in', $id_products );
    }
}

 

Conclusión

Como has podido comprobar, es posible restringir los productos por país directamente a través de código y usando la funcionalidad de Geolocalización de WooCommerce.

 
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores.

Suscríbete a DecodeCMS:  

 

¿Me ayudas a llegar a más gente?

Twittear Compartir LinkedIn WhatsApp

Artículos Relacionados

  • Geolocalización en WooCommerce con MaxMindGeolocalización en WooCommerce con MaxMind
  • Cambiar la caja de cantidad a una lista desplegable en WooCommerceCambiar la caja de cantidad a una lista desplegable en WooCommerce
  • Botones para el campo de cantidad en WooCommerceBotones para el campo de cantidad en WooCommerce
  • Etiqueta de Agotado en lista de productos WooCommerce sin pluginsEtiqueta de Agotado en lista de productos WooCommerce sin plugins
Valora este artículo : 1 barra2 barras3 barras4 barras5 barras (1 votos, promedio: 5,00 de 5)
Cargando...

Interacciones con los lectores

Para escribir código envolver con: <pre class="language-xxx"><code> </code></pre> ,reemplaza las xxx (php, css, html)

*

* Gravatar habilitado

Barra lateral principal

Presentación

Curso Decodifica WordPress

Únete a DecodeCMS

Recibirás como regalo:

Guia práctica con video:
¿Quieres agregar código a WordPress? Revisa las diferentes opciones que tienes.Ver más

Jooble
Alojamiento Wordpress

Niveles

Básico Intermedio Avanzado

Etiquetas

accesibilidad css dashboard editor error funcionalidad herramientas imagen js librería mejoras optimización seguridad social woocommerce

Populares

Mostrar notificaciones por usuario en la administración de WordPress

Agregar CSS personalizado al área de administración de WordPress

Deshabilita XML-RPC en WordPress y mejora tu seguridad

Mostrar mensajes en la administración de WordPress y en Gutenberg

© logo decode pie
Política de Privacidad | Política de devoluciones
Copyrigth 2023 Todos los derechos reservados