Woocommerce

Precio rebajado para clientes específicos en WooCommerce

1 hay 1 solo Like :)

Como siempre suelo hacer antes de publicar los artículos, he estado buscando y probando plugins que me permitiesen hacer esto mismo de forma sencilla.

El resultado es que no he encontrado ningun plugin gratuito que implemente esta funcionalidad en mi tienda. Todos los plugins que he visto eran de pago e incluían muchas más opciones. Opciones que no iba a usar y a las que no les iba a sacar partido.

Entonces, ¿qué otra opción hay para poder aplicar precios rebajados a los clientes que a mi me interese sin usar plugins?

La respuesta, como casi siempre, consiste en usar un código snippet.

En este caso, el código que he desarrollado aplica una rebaja del 10% en el precio de algunos productos de mi tienda para un grupo determinado de clientes al que he llamado «Cliente VIP«. Pero tú vas a poder configurar el porcentaje de descuento que tú quieras para que se aplique a los productos que a ti te interese.

// Crea el rol de usuario "Cliente VIP"
add_action( 'init', 'crea_rol_cliente_vip' );
function crea_rol_cliente_vip(){

    $customer_role = get_role( 'customer' );
    add_role( 'cliente_vip', __( 'Cliente VIP' ), $customer_role->capabilities );
}

// Aplica un precio especial dependiento del tipo de usuario
add_filter( 'woocommerce_get_price', 'aplica_precio_especial', 10, 2);
function aplica_precio_especial( $price, $product ) {
    
    if (!is_user_logged_in()) return $price;

    // Listado de productos con precio especial
    $product_list = array( '14893', '14887', '14881' );

    // % Descuento a aplicar
    $discount = 10;

    // Comprueba si el producto actual pertenece a la lista
    if( in_array( $product->id, $product_list ) || empty( $product_list ) ) {

        // Comprueba si el usuario tiene precio especial
        if( usuario_con_precio_especial( 'cliente_vip' ) ){
            
            $price = $price * ( 100 - $discount ) / 100;
        }
    }
    return $price;
}

function usuario_con_precio_especial( $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 );
}