Afișarea produselor dintr-o categorie specifică în pagina magazinului
Știu că mulți oameni au pus această întrebare, dar nu am găsit o modalitate potrivită de a o face. Cum să adaug o meta_query simplă (product_cat) înainte de executarea query-ului din pagina magazinului.
Poate prin folosirea unui filtru?
Cu stimă,
Adrien

Pagina de magazin este de fapt o pagină de arhivă pentru articolele de tip 'product'. Șablonul său se află în woocommerce/archive-product.php.
Trebuie să folosiți acțiunea pre_get_posts pentru a preprocesa interogarea înaintea buclei, conditional_tags pentru a recunoaște că vă aflați pe pagina de arhivă de produse și o interogare taxonomie pentru a filtra categoriile de produse, care aparțin taxonomiei 'product_cat'.
De exemplu, următorul cod (plasat în functions.php al temei sau într-un plugin) va afișa doar produsele din 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'
)
)
);
}
}
De asemenea, puteți exclude categorii folosind 'operator' => 'NOT IN', iar 'terms' poate fi un array de slug-uri ale categoriilor de produse.
O introducere bună în personalizarea interogărilor este http://www.billerickson.net/customize-the-wordpress-query/

Dacă doriți să afișați produse dintr-o anumită categorie pe pagina magazinului, puteți insera codul de mai jos în fișierul function.php
al temei.
// Execută înainte de începerea buclei
add_action( 'woocommerce_before_shop_loop', 'techlyse_before_action', 15 );
function techlyse_before_action() {
//Pentru a verifica dacă este pagina magazinului
if ( is_shop() ) {
$query_args['tax_query'] = array(
array(
'taxonomy' => 'product_cat',
'field' => 'id', //Dacă doriți slug-ul categoriei, treceți slug în loc de id și 1330 în loc de slug-ul categoriei.
'terms' => 1330
)
);
//print_r($query_args);
query_posts( $query_args );
}
}
// Execută după încheierea buclei
add_action( 'woocommerce_after_shop_loop', 'techlyse_after_action', 15 );
function techlyse_after_action() {
//Pentru a verifica dacă este pagina magazinului
if ( is_shop() ) {
//Resetează interogarea după buclă
wp_reset_query();
}
}
