ART PROJECT GROUP:
C/ Álvaro Mutis, 1. 4º G. C.P: 29651. Mijas. Málaga. España.
Teléfono: +34 665 058 218.

WooCommerce en modo catálogo para usuarios no registrados

  • WooCommerce - Blog

WooCommerce en modo catálogo para usuarios no registrados

El cliente otro día nuestro cliente EuroPalets Group nos planteó un reto interesante, montar en su sitio web bajo WooCommerce 2.3 una tienda y un catálogo online simultáneamente. Concretamente un catálogo virtual para sus visitantes y una tienda online para sus usuarios registrados.

El problema es que no encontramos ningún plugin para WooCommerce que nos permitiera mostrar un catálogo online a los visitantes y una tienda virtual estándar a los usuarios registrados.

Solución

Lo primero que hicimos fue desactivar la opción Habilitar registro en el “Mi Cuenta” página, que se encuentra en WooCommerce -> Ajustes -> Cuentas. De esta forma EuroPalets Group se asegura que ningún visitante se registre indebidamente en la tienda virtual.

Después creamos una serie de funciones PHP en el archivo functions.php del tema hijo que hacen que no se muestre el botón de añadir al carro en un producto o en los listados de productos. Además oculta completamente los precios y el carrito situado en la cabecera, a través de una hoja de estilo CSS, y pone en estado Borrador las páginas del carro y el pedido.

Aquí tienes el código PHP empleado en nuestro caso:

/* Modo Catálogo */
function apg_oculta_carro() {
	if ( !is_user_logged_in() ) {
		remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', has_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart' ) );
	}
}
add_action( 'woocommerce_single_product_summary', 'apg_oculta_carro', 10 );

function apg_oculta_carro_loop() {
	if ( !is_user_logged_in() ) {
		remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', has_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' ) );
	}
}
add_action( 'woocommerce_before_shop_loop_item_title', 'apg_oculta_carro_loop', 5 );

//Cargamos hoja de estilo adicional
function apg_anade_estilo() {
	if ( !is_user_logged_in() ) {
		wp_enqueue_style( 'catalogo-style', get_stylesheet_directory_uri() . '/catalogo.css' );
	}
}
add_action( 'wp_enqueue_scripts', 'apg_anade_estilo' );

//Mostramos las páginas carro y pedido a los usuarios registrados
function apg_comprueba_estado() {
	$paginas = array(
		get_option( 'woocommerce_cart_page_id' ),
		get_option( 'woocommerce_checkout_page_id' )
	);

	if ( is_user_logged_in() ) {
		foreach ( $paginas as $pagina ) {
			if ( get_post_status( $pagina ) != 'publish' ) {
				$page = array(
					'ID'          => $pagina,
					'post_status' => 'publish'
				);
				wp_update_post( $page );
			}
		}
	} else {
		foreach ( $paginas as $pagina ) {
			if ( get_post_status( $pagina ) != 'draft' ) {
				$page = array(
					'ID'          => $pagina,
					'post_status' => 'draft'
				);
				wp_update_post( $page );
			}
		}
	}
}
add_action( 'init', 'apg_comprueba_estado' );

Y la hoja de estilo CSS utilizada, en nuestro caso concreto, dentro del archivo catalogo.css:

.add_to_cart_button, #product_price, .tb_price_holder, #cart_menu, #shop_info .amount {
    display: none !important;
}

Resultado

Si el visitante no es un usuario registrado verá un catálogo online similar a esta captura:

EuroPalets Group en modo catálogo virtual

Mientras que si el visitante es un usuario registrado verá una tienda virtual similar a esta otra captura:

EuroPalets Group

Conclusión

De esta forma tan sencilla hemos dado una solución simple y elegante a la demanda planteada por EuroPalets Group, crear un catálogo y tienda online simultáneamente en un único sitio web.

Esperamos que os guste y os resulte útil este pequeño tutorial.

Quedamos a la espera de vuestros comentarios y aportaciones.

4 Comentarios

  1. lord miércoles, 27 de mayo de 2015 en 20:24- Responder

    Hola, si que existen varios plugins que permiten ver los artículos como catálogo si no se está registrado y como tienda si se está registrado. El más conocido el Catalog Visibility Options, pero es de pago. Yo lo he solucionado añadiendo al archivo functions.php el siguiente código:
    remove_action( ‘woocommerce_after_shop_loop_item’, ‘woocommerce_template_loop_add_to_cart’, 10 );

    remove_action( ‘woocommerce_single_product_summary’, ‘woocommerce_template_single_add_to_cart’, 30 );

    remove_action( ‘woocommerce_simple_add_to_cart’, ‘woocommerce_simple_add_to_cart’, 30 );

    remove_action( ‘woocommerce_grouped_add_to_cart’, ‘woocommerce_grouped_add_to_cart’, 30 );

    Y con esto conseguimos eliminar los botones de “Añadir al carro” de todas las páginas.

    En fin, es otra solución. n saludo

    • Art Project Group miércoles, 27 de mayo de 2015 en 20:26- Responder

      Gracias por el aporte. Echaremos un vistazo a este plugin que nos comentas.

      Un saludo.

    • Art Project Group miércoles, 27 de mayo de 2015 en 20:59- Responder

      Si, ese plugin fue uno de los muchos que estuvimos mirando, pero no terminó de convenceros varias cosas, entre otras el pago anual al que te someten los chicos de WooThemes en sus licencias.

      De todas formas gracias por el aporte.

      Un saludo.

  2. Edgar viernes, 28 de octubre de 2016 en 9:17- Responder

    Funciona de Maravilla!! Agradecido por el aporte! solo que en mi tema los nombres de las clases css cambian, solo las ubico y las añado al catalogo.css y listo!!

Deje un comentario

Comparte esto con un amigo