CMS Woocommerce WordPress

WooCommerce: Ocultar categorías de productos en tu tienda

No mostrar determinados productos en tu tienda online o en cualquier otra página que liste productos

Imaginemos que tenemos una tienda online, pero que gran parte de los productos de nuestro catálogo no queremos que aparezcan en la portada de la misma.

Sí queremos que estén indexables en Google, y que estén accesibles para los usuarios, pero no desde la portada de la tienda. Así que… ¿Cómo hacemos esto?

 

Vamos al functions.php de nuestro tema activo, y añadimos la siguiente función:

add_action( 'woocommerce_product_query', 'prefix_custom_pre_get_posts_query' );

function prefix_custom_pre_get_posts_query( $q ) {
	
	if( is_shop() ) { //No se mostrarán en estas páginas
	    $tax_query = (array) $q->get( 'tax_query' );
	
	    $tax_query[] = array(
	           'taxonomy' => 'product_cat',
	           'field'    => 'slug',
	           'terms'    => array( 'productos-fotos', 'cat2' ), // Categorías que no mostraremos
	           'operator' => 'NOT IN'
	    );
	
	
	    $q->set( 'tax_query', $tax_query );
	}
}

 

Donde:

if( is_shop() ) {

Serán las páginas donde no vamos a mostrar los productos. En este caso, en la tienda (shop). Pero también podemos poner tantas como deseemos. Ej:

if( is_shop() || is_page('awards') ) {

 

Por otro lado, en el array, especificaremos la categoría o categorías que contendrán los productos a ocultar. En nuestro ejemplo, no se mostrarán los productos de las categorías: productos-fotos y cat2

'terms'    => array( 'productos-fotos', 'cat2' ),

 

¿Y para qué nos puede servir esto?
Pues, por ejemplo, para crear landing pages específicas de productos concretos.

Cristian Sarabia Martínez

Desde que a principios de los 90 mi padre desempolvó su Spectrum, no he dejado de probar y experimentar con la tecnología.

Enamorado del mundo web, Full Stack Developer de profesión y diseñador por devoción.

Ahora hago mis pinitos en esto del blogging para compartir con vosotros un poquito de todo lo que la comunidad me ha dado.

5 Comentarios

Haz clic aquí para dejar tu comentario

  • Bienvenido Rafael!

    Puedes utilizar los filters:
    «widget_categories_args» y «widget_categories_dropdown_args».

    Quedando algo como:

    function exclude_widget_categories($args) {

    //ID de la categoría a excluir
    $excluded = ’25’;
    $args[‘exclude’] = $excluded;
    return $args;

    }

    add_filter( ‘widget_categories_args’, ‘exclude_widget_categories’, 10, 1 );
    add_filter( ‘widget_categories_dropdown_args’, ‘exclude_widget_categories’, 10, 1 );

  • Hola Rafael.

    Muy buena la función. Quisiera saber si se puede hacer esto mismo pero para una tienda que muestra primero todas las categorías, y a partir de la categoría seleccionada muestra los productos de esa categoría. pero también está mostrando la categoría sin-categorizar; y es lo que quiero evitar. Se puede hacer eso? es decir, evitar que muestre esa categoría?

    Muchas gracias.

  • Hola super_looper.

    Y si mi página de tienda lo que muestra son las categorías sin importar que no tengan productos, cómo puedo evitar que se muestre la categoría ‘sin-categorizar’?

    Muchas gracias

  • Buenas,

    Estoy usando el tema Storefront para Woocommerce, y no quiero que aparezcan los productos de algunas categorías en la tienda y en la página de inicio de la web. Para ello estoy usando el código que proporcionas con la siguiente modificación en la condición if():

    if( is_shop() || is_page(‘inicio’) || is_home() || is_front_page() )

    He conseguido que los productos de estas categorías se dejen de mostrar en la página de la tienda pero se siguen mostrando en la página de inicio.

    ¿Me podrías ayudar para solucionar este problema?

    Gracias y un saludo.