Ocultar precio a usuarios no registrados en WooCommerce

Ocultar precio a usuarios no registrados en WooCommerce

Con el paso de los años las tiendas online han ido cada vez cobrando más relevancia para los negocios, ya que con una mínima inversión pueden adaptar su modelo para que cualquier persona pueda llegar a el a través de internet. Y es que con las múltiples opciones actuales que existen para montar un ecommerce, tenemos la posibilidad de hacer proyectos a medida que se adapten para prácticamente cualquier caso. Un ejemplo de ello es WooCommerce, que a modo de plugin nos sirve de complemento perfecto de tienda para WordPress. Sin embargo, aunque éste está pensado para cubrir la mayoría de las necesidades que un negocio pueda tener, cualquier cosa que se salga de lo habitual habrá que implementarlo por nuestra cuenta.

En este artículo explicaremos cómo hacer que nuestra tienda online no muestre los precios de los productos a menos que el usuario esté registrado y haya hecho login. Esta función se torna realmente interesante cuando hablamos de plataformas de venta al por mayor, en la que se requiere una verificación previa del comprador o en el caso de venta exclusiva para socios de un determinado colectivo.

Por defecto WooCommerce no permite la discriminación entre usuarios registrados y visitantes a la hora de mostrar el precio, sino que es necesario valerse de algún plugin aparte que nos permita dicha funcionalidad. No obstante, nosotros vamos a ver cómo hacerlo programando y modificando el código de la propia herramienta.

Antes de entrar en faena me gustaría comentar que, aunque voy a tratar de explicarlo paso a paso, lo ideal sería que estuvieras familiarizado con el entorno de WordPress, ya que si nunca has trabajado con el sistema de plantillas puede ser una primera aproximación bastante brusca.

Lo primero que tenemos que saber es que WooCommerce es altamente personalizable sin necesidad de modificar directamente los archivos del plugin, sino que podemos hacerlo desde nuestra plantilla cómodamente sin comprometer los archivos originales. Esto permite por un lado que al hacer actualizaciones no se sobrescriba nuestro código y por otro que los cambios cambios acompañen a la instalación de nuestro tema en concreto. El sistema se basa en hacer una copia de los archivos que contienen la estructura y luego modificarlos a nuestro criterio, de modo que se le da prioridad en la carga a éstos respecto a los originales.

Para poder ocultar el precio vamos a necesitar los archivos que lo imprimen y para ello iremos al directorio /wp-content/plugins/woocommerce/templates/ en nuestra instalación de WordPress. Una vez dentro copiaremos dos archivos que están en dos ubicaciones diferentes. El primero lo encontraremos en /loop/price.php e imprime el precio cuando se listan los productos, mientras que el segundo estará en /single-product/price.php y lo muestra dentro de la ficha del producto.

El siguiente paso es ir a la carpeta raíz de nuestro tema y crear un nuevo directorio llamado /woocommerce/ que será donde pegaremos los archivos copiados. Es importante que a la hora de duplicarlos preservemos la misma estructura que tenían dentro de su ubicación original. Es decir, los archivos que coloquemos dentro de /nuestrotema/woocommerce/ deben tener la misma disposición que tienen en /wp-content/plugins/woocommerce/templates/ por lo que si éstos se encuentran dentro de directorios habrá que crearlos. Una vez copiados abriremos los archivos para hacer los cambios correspondientes.

Listado de productos

Abrimos el archivo /loop/price.php y buscaremos el siguiente segmento de PHP.

<?php if ( $price_html = $product->get_price_html() ) : ?>
	<span class="price"><?php echo $price_html; ?></span>
<?php endif; ?>

Lo que vamos a hacer es añadir un condicional junto con la función is_user_logged_in() que nos permitirá comprobar si el usuario ha iniciado sesión para mostrar el precio.

<?php if ($price_html = $product->get_price_html()) : ?>
	<?php if (is_user_logged_in()){ ?><span class="price"><?php echo $price_html; ?></span><?php } ?>
<?php endif; ?>

Ficha del producto

Por último abriremos /single-product/price.php en busca de algo parecido a esto (puede haber leves variaciones dependiendo de la versión de WooCommerce).

<p class="price"><?php echo $product->get_price_html(); ?></p>

Como en el caso anterior, añadiremos un condicional con la función is_user_logged_in() para verificar si se ha hecho login.

<?php if (is_user_logged_in()){ ?><p class="price"><?php echo $product->get_price_html(); ?></p><?php }?>

Tras hacer estas actualizaciones, nuestra tienda online ya debería mostrar el precio de los productos solo a los usuarios registrados. No obstante, es conveniente aclarar que este ejemplo está basado en una instalación estándar, por lo que si vas a hacer modificaciones en una plantilla que ya haya personalizado WooCommerce es posible que el código anterior no sea exactamente igual y los archivos ya se encuentren trasladados al directorio del tema.

Para terminar, también puedes visitar este otro artículo donde ver paso a paso cómo ocultar el botón de añadir al carrito para los visitantes no registrados. Esta combinación será perfecta para reservar las funciones de ecommerce solo a usuarios que hayan hecho login.

8 respuestas a «Ocultar precio a usuarios no registrados en WooCommerce»

  1. Avatar de Juan
    Juan

    Genial, muy útil, gracias 😉

    1. Avatar de Jesús Tovar

      Gracias Juan 🙂

      Un saludo.

  2. Avatar de William
    William

    Intento hacer esto pero no me funciona 🙁 no se que estare haciendo mal, necesito ayuda

    1. Avatar de Jesús Tovar

      Hola William, ¿puedes decirme paso a paso lo que has hecho?

    2. Avatar de William
      William

      single-product.php
      get_price_html(); ?>

      price.php
      get_price_html() ) : ?>

    3. Avatar de Jesús Tovar

      Ahí falta mucho código, supongo que se te habrá quedado atrás.

      Debes usar el condicional para contener el echo que imprime el precio en la plantilla. Arriba puedes encontrar el código que debe aparecer en tu plantilla y a continuación el código por el que debes sustituirlo.

      ¿No te funciona ni en el listado ni en la ficha de producto?

    4. Avatar de William
      William

      lo hice como dices pero no me funciona y acá en los comentario no me deja enviarte como tengo el codigo siempre me lo corta.

    5. Avatar de Jesús Tovar

      Ok, ¿puedes describirme entonces que ocurre exactamente (si sigue apareciendo el precio, si da error…)?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *