Cómo excluir métodos de envío según el rol del usuario en WooCommerce

En muchas tiendas online es útil ofrecer diferentes opciones de envío según el tipo de usuario que está comprando. Por ejemplo, tal vez quieras ocultar el método de «Envío gratuito» a usuarios no registrados, o mostrar un método especial solo para mayoristas. En este artículo te enseñamos cómo lograrlo mediante un snippet simple en tu sitio WooCommerce.

 

¿Por qué filtrar métodos de envío por rol?

WooCommerce, por defecto, no distingue entre roles de usuario al mostrar los métodos de envío disponibles. Sin embargo, con un poco de código, podemos personalizar esta experiencia para:

  • Ofrecer precios especiales de envío a distribuidores o mayoristas.
  • Restringir métodos premium solo a usuarios con cuenta.
  • Ocultar opciones de envío rápido a ciertos clientes.

Vamos al código.

 

Snippet para excluir métodos de envío según el rol

Agrega el siguiente snippet en el archivo functions.phpde tu child theme, o bien en un plugin personalizado:

<?php
add_filter( 'woocommerce_package_rates', 'filterShippingMethodsByUserRole', 10, 2 );

function filterShippingMethodsByUserRole( $shippingRates, $package ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
        return $shippingRates;
    }

    $currentUser   = wp_get_current_user();
    $userRoles     = (array) $currentUser->roles;

    // Definimos los métodos de envío que queremos ocultar
    $excludedMethods = [
        'flat_rate:3',      // Cambia esto por el ID real del método
        'free_shipping:1',  // Ejemplo: ocultar "Envío gratuito"
    ];

    // Definimos a qué roles se les ocultan esos métodos
    $rolesToRestrict = [ 'customer', 'subscriber' ];

    foreach ( $shippingRates as $rateId => $rate ) {
        if ( in_array( $rateId, $excludedMethods ) && array_intersect( $userRoles, $rolesToRestrict ) ) {
            unset( $shippingRates[ $rateId ] );
        }
    }

    return $shippingRates;
}

 

¿Cómo saber el ID del método de envío?

Para saber cuál es el ID de un método de envío:

  1. Ve a WooCommerce > Ajustes > Envío > Zonas de envío.
  2. Haz clic en Editar en una zona específica.
  3. Coloca el cursor sobre el método y observa el enlace en la barra de estado del navegador. Verás algo como:
method_id=flat_rate&instance_id=3

 

Lo que te interesa es concatenar estos dos valores con ::

flat_rate:3

 

Personalizar por rol y método

Puedes adaptar fácilmente el snippet anterior para distintos casos. Por ejemplo:

  • Ocultar solo para usuarios no registrados:
<?php
if ( ! is_user_logged_in() && in_array( $rateId, $excludedMethods ) ) {
    unset( $shippingRates[ $rateId ] );
}

 

  • Mostrar un método solo para administradores:
<?php
if ( ! in_array( 'administrator', $userRoles ) && $rateId === 'local_pickup:2' ) {
    unset( $shippingRates[ $rateId ] );
}

 

Este tipo de personalización te permite ofrecer una experiencia de compra más relevante y profesional en WooCommerce. Al ocultar o mostrar métodos de envío según el rol del usuario, puedes mejorar la logística, premiar a clientes especiales o simplificar la interfaz de compra.

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to Top
0
Would love your thoughts, please comment.x
()
x