Visualizzare prodotti di una categoria specifica nella pagina del negozio
So che molte persone hanno fatto questa domanda ma non ho trovato un modo appropriato per farlo. Come aggiungere una semplice meta_query (product_cat) prima dell'esecuzione della query della pagina del negozio.
Forse utilizzando un filtro?
Cordiali saluti,
Adrien

La pagina del negozio è in realtà una pagina di archivio per i post di tipo 'product'. Il suo template si trova in woocommerce/archive-product.php.
È necessario utilizzare l'azione pre_get_posts per preprocessare la query prima del loop, i conditional_tags per riconoscere che ci si trova nella pagina di archivio dei prodotti, e una taxonomy query per filtrare le categorie di prodotti, che appartengono alla tassonomia 'product_cat'.
Ad esempio, il seguente codice (posizionato nel functions.php del tuo tema o in un plugin) mostrerà solo i prodotti con la categoria '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'
)
)
);
}
}
Puoi anche escludere le categorie utilizzando 'operator' => NOT IN, e 'terms' può essere un array di slug di categorie di prodotti.
Una buona introduzione alla personalizzazione delle query è http://www.billerickson.net/customize-the-wordpress-query/

Se vuoi mostrare prodotti da una specifica categoria nella tua pagina del negozio, puoi inserire il seguente codice nel file function.php
del tuo tema.
// Esegui prima che inizi il loop
add_action( 'woocommerce_before_shop_loop', 'techlyse_before_action', 15 );
function techlyse_before_action() {
// Per assicurarsi che sia la pagina del negozio
if ( is_shop() ) {
$query_args['tax_query'] = array(
array(
'taxonomy' => 'product_cat',
'field' => 'id', // Se vuoi lo slug della categoria, passa slug invece di id e 1330 invece dello slug della categoria.
'terms' => 1330
)
);
//print_r($query_args);
query_posts( $query_args );
}
}
// Esegui dopo che il loop termina
add_action( 'woocommerce_after_shop_loop', 'techlyse_after_action', 15 );
function techlyse_after_action() {
// Per assicurarsi che sia la pagina del negozio
if ( is_shop() ) {
// Resetta la query dopo il loop
wp_reset_query();
}
}
