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 ); }