WooCommerce mostrar precios solo a usuarios registrados
A estas alturas todos tenemos claro el potencial y la flexibilidad de WooCommerce como plataforma de venta online. Es sin duda la mejor opción para montar un comercio electrónico sin necesidad de disponer de muchos recursos ni conocimientos técnicos.
Pero ¿qué ocurre cuando eres un mayorista y quieres que los precios solo los puedan ver tus clientes?
Recientemente me vi en la situación de que un cliente quería mostrar todos sus productos online con información detallada de cada uno de ellos, pero no quería que se vieran los precios. Únicamente los usuarios registrados, a los ellos previamente habían dado de alta, podían tener acceso a los precios y a la compra de productos. No es un caso habitual, pero de vez en cuando se da.
En este artículo mostraré un sencillo truco para ocultar los precios y los botones de compra excepto para los usuarios que están dados de alta en la página web.
Mostrar precios solo a usuarios registrados con WooCommerce
Hacerlo es tan sencillo como añadir las siguientes líneas de código al archivo functions.php de tu theme activo o mejor aún en un plugin de funcionalidades que puedes crear y en que puedes añadir esta funcionalidad y otras muchas.
En ambos casos funcionará bien, la diferencia es que los elementos de tu archivo functions.php solo se ejecutan en el tema y cuando lo cambiamos por otro la funcionalidad desaparece, mientras que los plugins se ejecutan independientemente del tema siempre que se encuentre activo.
El código a incluir es el siguiente:
//Ocultar precios a usuarios no registrados add_action('after_setup_theme','sauco_activate_filter') ; function sauco_activate_filter(){ add_filter('woocommerce_get_price_html', 'sauco_show_price_logged'); } function sauco_show_price_logged($price){ if(is_user_logged_in() ){ return $price; } else { remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); } }
Si además quieres incluir un texto indicando que los precios solo están disponibles para usuarios registrados deberas añadir las siguientes líneas al código
return 'Venta exclusiva a profesionales. Contacta con nosotros si quieres ser distribuidor de nuestros productos';
Con lo que el código definitivo sería el siguiente:
//Ocultar precios a usuarios no registrados add_action('after_setup_theme','sauco_activate_filter') ; function sauco_activate_filter(){ add_filter('woocommerce_get_price_html', 'sauco_show_price_logged'); } function sauco_show_price_logged($price){ if(is_user_logged_in() ){ return $price; } else { remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 ); remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 ); return 'Venta exclusiva a profesionales. Contacta con nosotros si quieres ser distribuidor de nuestros productos'; } }
Como podéis ver es un truco muy sencillo pero al mismo tiempo muy efectivo.
Interesante, pero como hacer para que cuando añadan el producto al carrito no aparezca el precio? gracias.
Muy Bueno!!! he estado horas buscando y esto es lo mejor!gracias!!!!
excelente aporte!
Ahora propongo otro caso, quiero que no se muestren precios:
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_price', 10 );
Pero si quiero que me permita añadir a la cesta, he comentado estas dos líneas:
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
Se puede hacer que en la página del carrito se muestren los productos sin precio y nos de la opción en ese momento de crear una cuenta para poder acceder a precios y al checkout final?
Excelente muy buen aporte! estuve a punto de comprar un Plugin y encontré este articulo.
Mucha gracias.
Me alegro que el post te haya resultado útil.
Saludos
¡Genial!. Sencillo y práctico. Muchas gracias por la información.
¡Muchas gracias Ray!
justo lo que necesito, gracias, acaban de pedirme un woocommerce con esta funcionalidad, y sé como hacerlo en prestashop, pero no lo tenia claro en wordpress.
Gracias de nuevo.
Saludos amigos.
Observo que colocando el código:
return 'Venta exclusiva a profesionales. Contacta con nosotros si quieres ser distribuidor de nuestros productos';
La frase solo aparece en el primer producto de mi catálogo, quisiera que apareciera en cada uno de los productos. Qué debo hacer?
Gracias de antemano