Cambiar el Precio Mostrado en WooCommerce Según el Rol de Usuario y Categoría

27 ago 2013, 08:07:40
Vistas: 28.5K
Votos: 13

En WordPress con WooCommerce, busco mostrar un precio diferente basado en el rol del usuario (mayorista, distribuidor, etc.) Y basado en la categoría.

Existe un plugin de precios dinámicos que muestra estos descuentos una vez que se agrega un artículo al carrito, pero no en la página misma.

¿Hay alguna manera de usar un filtro o acción para verificar el nivel del usuario, comprobar la categoría del artículo y luego cambiar el precio dinámicamente?

// Ejemplo de solución:
add_filter('woocommerce_product_get_price', 'ajustar_precio_por_rol_y_categoria', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'ajustar_precio_por_rol_y_categoria', 10, 2);

function ajustar_precio_por_rol_y_categoria($price, $product) {
    // Obtener el rol del usuario actual
    $user = wp_get_current_user();
    $user_roles = $user->roles;

    // Obtener las categorías del producto
    $product_categories = get_the_terms($product->get_id(), 'product_cat');

    // Definir los descuentos por rol y categoría
    $descuentos = array(
        'mayorista' => array(
            'electronica' => 0.20, // 20% descuento
            'ropa' => 0.15        // 15% descuento
        ),
        'distribuidor' => array(
            'electronica' => 0.30, // 30% descuento
            'ropa' => 0.25        // 25% descuento
        )
    );

    // Aplicar descuento si corresponde
    if (!empty($user_roles) && !empty($product_categories)) {
        foreach ($user_roles as $role) {
            foreach ($product_categories as $category) {
                if (isset($descuentos[$role][$category->slug])) {
                    $precio_con_descuento = $price * (1 - $descuentos[$role][$category->slug]);
                    return $precio_con_descuento;
                }
            }
        }
    }

    return $price;
}
0
Todas las respuestas a la pregunta 2
3
19

Sí, existe la posibilidad. Puedes utilizar el hook de filtro woocommerce_get_price para filtrar el valor según el rol del usuario y devolver un precio acorde, por ejemplo:

add_filter('woocommerce_get_price', 'custom_price_WPA111772', 10, 2);
/**
 * custom_price_WPA111772 
 *
 * Filtra el precio basado en la categoría y el rol del usuario
 * @param  $price   
 * @param  $product 
 * @return 
 */
function custom_price_WPA111772($price, $product) {
    if (!is_user_logged_in()) return $price;

    //Verificar si el producto está en una categoría específica, por ejemplo camisas
    if( has_term( 'shirts', 'product_cat' ,$product->ID) ) {
        //Verificar si el usuario tiene el rol de distribuidor usando una función auxiliar (ver abajo)
        if (has_role_WPA111772('dealer')){
            //Aplicar un descuento del 10%
            $price = $price * 0.9;
        }
    }
    return $price;
}

/**
 * has_role_WPA111772 
 *
 * Función para verificar si un usuario tiene un rol específico
 * 
 * @param  string  $role    Rol a verificar 
 * @param  int  $user_id    ID del usuario
 * @return boolean
 */
function has_role_WPA111772($role = '',$user_id = null){
    if ( is_numeric( $user_id ) )
        $user = get_user_by( 'id',$user_id );
    else
        $user = wp_get_current_user();

    if ( empty( $user ) )
        return false;

    return in_array( $role, (array) $user->roles );
}
27 ago 2013 12:33:02
Comentarios

Intenté esto. Agregué este código en functions.php. No funciona.

User User
18 jun 2016 18:12:30

Gracias por esta gran respuesta. Por alguna razón, los precios de mis variaciones no cambian al usar este filtro. ¿Estás familiarizado con este problema?

Robbert Robbert
11 jul 2018 15:13:05

Funciona solo con productos simples

Klevis Miho Klevis Miho
1 oct 2018 21:08:00
1

Puedes probar el plugin de Precios Específicos para Clientes en WooCommerce. Con este complemento, puedes añadir diferentes precios para usuarios registrados.

Actualmente, el plugin se encuentra en su fase inicial, pero pronto habrá actualizaciones para incluir funciones adicionales como precios basados en categorías de productos.

6 sept 2014 11:27:36
Comentarios

este plugin solo puede descontar un producto. ¿Qué pasa si quieres aumentar el precio?

Klevis Miho Klevis Miho
1 oct 2018 21:07:27