Saltar al contenido

Listar productos solo en la subcategoría en Woocommerce

Hace ya tiempo hice una comparativa entre PrestaShop y WooCommerce, que a día de hoy no ha cambiado en lo básico. PrestaShop viene más completo por defecto, pero es más difícil de mantener.

En WooCommerce que si seleccionas un producto para que salga en un listado de una subcategoría te lo muestra automáticamente en su categoría principal. Esto suele ser contraproducente para el SEO, ya que puedes generar una categoría principal con muchos productos y mucha paginación.

Ejemplo de distintos comportamientos en el listado de productos

Te pongo un ejemplo para que lo entiendas mejor, si yo tengo una tienda de muebles y tengo una categoría Camas y 3 subcategorías con Camas rústicas, Camas modernas y camas vintage con 30 productos cada una, automáticamente saldrán los 90 productos listados en la categoría Camas, aunque no hayas seleccionado esta categoría en los productos.

  • Camas –> (90 productos asociados)
    • Camas rústicas –>(30 productos asociados)
    • Camas modernas –>(30 productos asociados)
    • Camas vintage –>(30 productos asociados)

En la mayoría de los casos nos interesará poner las 5 o 10 camas más vendidas de cada categoría, dando como resultado un listado mucho menor, como podemos ver a continuación:

  • Camas –> (30 productos asociados)
    • Camas rústicas –>(30 productos asociados)
    • Camas modernas –>(30 productos asociados)
    • Camas vintage –>(30 productos asociados)

Este es el comportamiento que trae PrestaShop por defecto y es una forma más lógica y versátil de gestionar el listado de productos.

Script para conseguir que los productos se listen solo en la categoría seleccionada

El siguiente script lo tienes que copiar y pegar en el function.php o también puedes usar el plug-in Code Snippets para hacerlo:

function exclude_product_cat_children($wp_query) {
if ( isset ( $wp_query->query_vars['product_cat'] ) && $wp_query->is_main_query()) {
    $wp_query->set('tax_query', array(
                                    array (
                                        'taxonomy' => 'product_cat',
                                        'field' => 'slug',
                                        'terms' => $wp_query->query_vars['product_cat'],
                                        'include_children' => false
                                    )
                                 )
    );
  }
}
add_filter('pre_get_posts', 'exclude_product_cat_children');

De esta forma, cuando pongas un producto en una categoría hija no aparecerá en la categoría padre a no ser que la selecciones también. Esta función no la he creado yo, la vi en este github y la pongo aquí por si os sirve y así tenerla yo siempre a mano.

Compartir este Articulo