Mostrar productos de una categoría específica en la página de tienda

28 abr 2013, 13:47:19
Vistas: 33.2K
Votos: 6

Sé que muchas personas han preguntado sobre esto pero no encontré una manera adecuada de hacerlo. ¿Cómo agregar una simple meta_query (product_cat) antes de la ejecución de la consulta de la página de tienda?

¿Tal vez usando un filtro?

Saludos,

Adrien

0
Todas las respuestas a la pregunta 3
0
19

La página de tienda es en realidad una página de archivo para publicaciones del tipo 'product'. Su plantilla se encuentra en woocommerce/archive-product.php.

Necesitas usar la acción pre_get_posts para preprocesar la consulta antes del ciclo, conditional_tags para reconocer que estás en la página de archivo de productos, y una consulta de taxonomía para filtrar las categorías de productos, que pertenecen a la taxonomía 'product_cat'.

Por ejemplo, el siguiente código (colocado en el functions.php de tu tema o en un plugin) mostrará solo productos con la categoría 'type-1':

 add_action('pre_get_posts','shop_filter_cat');

 function shop_filter_cat($query) {
    if (!is_admin() && is_post_type_archive( 'product' ) && $query->is_main_query()) {
       $query->set('tax_query', array(
                    array ('taxonomy' => 'product_cat',
                                       'field' => 'slug',
                                        'terms' => 'type-1'
                                 )
                     )
       );   
    }
 }

También puedes excluir categorías usando 'operator' => 'NOT IN', y 'terms' puede ser un array de slugs de categorías de productos.

Una buena introducción a la personalización de consultas es http://www.billerickson.net/customize-the-wordpress-query/

29 abr 2013 03:26:54
0

Esto funcionó para mí:

[product_category category="TU CATEGORÍA" per_page="8" columns="3" orderby="date" order="desc"]
23 may 2015 19:12:27
1

Si deseas mostrar productos de una categoría específica en tu página de tienda, puedes insertar el siguiente código en el archivo function.php de tu tema.

// Ejecutar antes de que comience el bucle
add_action( 'woocommerce_before_shop_loop', 'techlyse_before_action', 15 );
function techlyse_before_action() {
    //Para asegurar que es la página de tienda
    if ( is_shop() ) {
        $query_args['tax_query'] =  array(
            array( 
                'taxonomy' => 'product_cat',   
                'field' => 'id',  //Si deseas usar el slug de la categoría, pasa slug en lugar de id y el slug de la categoría en lugar de 1330. 
                'terms' => 1330 
            )
        );  
        //print_r($query_args);
        query_posts( $query_args );
    }
} 

// Ejecutar después de que termine el bucle
add_action( 'woocommerce_after_shop_loop', 'techlyse_after_action', 15 );
function techlyse_after_action() {
    //Para asegurar que es la página de tienda
    if ( is_shop() ) {
        //Reiniciar la consulta después del bucle
        wp_reset_query();
    }
}
4 abr 2019 14:28:29
Comentarios

Esta no es la forma correcta de hacerlo, pero me resultó útil para otra situación, así que gracias.

MarcGuay MarcGuay
23 nov 2021 21:52:00