Ocultar botón de añadir al carrito a usuarios no registrados en WooCommerce

Ocultar botón de añadir al carrito a usuarios no registrados en WooCommerce

WooCommerce es una de las plataformas actuales más usadas a la hora de desarrollar una tienda online. Su sencillez junto al buen funcionamiento lo hacen una opción ideal para proyectos que no revisten una excesiva complejidad. Esto no quiere decir que no pueda ser ajustado a nuestras necesidades, ya que precisamente al nutrirse de la comunidad de WordPress, existe un gran abanico de complementos que se pueden integrar.

Nosotros vamos a ver cómo añadir una nueva funcionalidad que permita mostrar el botón de añadir al carrito solo a usuarios registrados. De este modo podemos tener una web a modo de catálogo de productos para los usuarios normales y un ecommerce para los registrados, muy útil si somos un proveedor por ejemplo que no hacemos venta al público.

Aunque existen plugins que permiten hacer lo mismo, voy a mostrar cómo implementarlo programando un poco. Para ello, aunque procuraré ir por partes, es recomendable que al menos estés un poco familiarizado con la jerarquía de plantillas que usa WordPress o quizá te resulte un poco confuso inicialmente.

WooCommerce nos permite hacer modificaciones sobre su script sin alterar los archivos originales. Para ello podremos hacer un directorio en la raíz de nuestro tema llamado /woocommerce/ donde ubicaremos una copia de los archivos del plugin que queremos modificar, de modo que éstos tendrán prioridad sobre los originales en la carga de la página. Es importante que a la hora de duplicarlos preservemos la misma estructura que tenían dentro de su ubicación original, donde el directorio /templates/ del plugin será el equivalente a nuestro nuevo directorio /woocommerce/ dentro del tema.

Una vez aclarado lo anterior y entrando ya en materia, iremos a la carpeta /wp-content/plugins/woocommerce/templates/ en nuestra instalación de WordPress. Dentro copiaremos el archivo /loop/add-to-cart.php, que imprime el botón cuando se listan los productos, y también /single-product/add-to-cart/simple.php, cuya función es imprimirlo dentro de la ficha del producto. Pegaremos ambos en el directorio que creamos antes manteniendo la disposición de carpetas que he apuntado y luego los abriremos para editarlos.

Listado de productos

Primero modificaremos /loop/add-to-cart.php que contiene un script similar al siguiente.

echo apply_filters( 'woocommerce_loop_add_to_cart_link',
	sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
		esc_url( $product->add_to_cart_url() ),
		esc_attr( isset( $quantity ) ? $quantity : 1 ),
		esc_attr( $product->id ),
		esc_attr( $product->get_sku() ),
		esc_attr( isset( $class ) ? $class : 'button' ),
		esc_html( $product->add_to_cart_text() )
	),
$product );

Añadiremos un condicional junto con la función is_user_logged_in() para verificar si el usuario ha hecho login antes en imprimir el botón.

if (is_user_logged_in()){
	echo apply_filters( 'woocommerce_loop_add_to_cart_link',
		sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
			esc_url( $product->add_to_cart_url() ),
			esc_attr( isset( $quantity ) ? $quantity : 1 ),
			esc_attr( $product->id ),
			esc_attr( $product->get_sku() ),
			esc_attr( isset( $class ) ? $class : 'button' ),
			esc_html( $product->add_to_cart_text() )
		),
	$product );
}

Ficha del producto

Después modificaremos el código dentro de la ficha del producto. Para esto es importante que tengas en cuenta que existen distintos tipos de productos y para cada uno WooCommerce tiene un archivo específico. Nosotros vamos a ver el ejemplo de cómo hacerlo con /single-product/add-to-cart/simple.php que es el que muestra la ficha cuando un producto es de tipo simple, pero el método es extrapolable a los otros. Podrás encontrarlos en el mismo directorio y hacer el proceso pertinente dependiendo del modelo de tu tienda.

<button type="submit" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>

De nuevo usaremos un condicional y la función is_user_logged_in() para verificar si el usuario está registrado y tiene la sesión abierta.

<?php if (is_user_logged_in()){ ?>
	<button type="submit" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></button>
<?php } ?>

Con estos cambios nuestro ecommerce ya debería mostrar el botón de añadir al carrito en los productos solo a los usuarios registrados. Sin embargo, como desarrollador de tiendas online freelance, es conveniente aclarar que aquí me baso en una instalación por defecto, de modo que si vas a hacer modificaciones en un tema que ya haya personalizado WooCommerce es posible que el código anterior no sea igual.

Como apunte adicional, si además de esta función quieres también ocultar el precio a usuarios no registrados, en el artículo podrás ver cómo hacerlo modificando los archivos correspondientes también paso a paso.

2 respuestas a «Ocultar botón de añadir al carrito a usuarios no registrados en WooCommerce»

  1. Avatar de Anonimo
    Anonimo

    Mil gracias! Me ha sido de mucha ayuda 🙂

    1. Avatar de Jesús Tovar

      Me alegro, gracias a ti por el feedback 😀

Deja una respuesta

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