WP_Query: Excludează produsele ascunse din lista de produse WooCommerce
Sper că această întrebare nu este prea specifică WooCommerce.
Am un scurtcod util care afișează o listă cu toate produsele mele și codurile lor SKU. Totuși, include și produsele pe care le-am publicat, dar le-am setat vizibilitatea în catalog ca "ascuns".
Nu găsesc niciun argument/parametru pentru a exclude produsele ascunse (sau pentru a include doar cele marcate ca Vizibil în Catalog/Căutare).
Știu că trebuie să fie simplu; doar nu l-am găsit încă. Mulțumesc pentru orice ajutor.
Iată codul:
<?php
$params = array('posts_per_page' => -1, 'post_type' => 'product', 'orderby' => 'menu-order', 'order' => 'asc');
$wc_query = new WP_Query($params);
?>
<table class="product-list tablesorter"><thead><tr><th>SKU</th><th>Nume Produs</th></tr></thead><tbody>
<?php if ($wc_query->have_posts()) : ?>
<?php while ($wc_query->have_posts()) :
$wc_query->the_post(); ?>
<tr>
<td><?php global $product; echo $product->get_sku(); ?></td>
<td><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></td>
</tr>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<tr><td>
<?php _e( 'Nu există produse' ); ?>
</td> </tr>
<?php endif; ?>
</tbody>
</table>
Începând cu WooCommerce 3, vizibilitatea a fost schimbată în taxonomie în loc de meta. Deci, trebuie să schimbați meta_query în tax_query. Pentru a afișa doar produsele vizibile,
'tax_query' => array(
array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'exclude-from-catalog',
'operator' => 'NOT IN',
),
),
și exemple pentru Produse Recomandate
'tax_query' => array(
array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'featured',
),
),
Termeni posibili: 'exclude-from-search', 'exclude-from-catalog', 'featured', 'outofstock'.
Important: Următoarele funcționează doar pentru versiunile WooCommerce mai mici de 3.0. Pentru un răspuns mai actualizat, te rugăm să consulți celălalt răspuns de la kalle.
WooCommerce salvează aceste date ca metadata, așa că va trebui să execuți o Interogare Meta împotriva numelui _visibility. Ceva de genul:
'meta_query' => array(
array(
'key' => '_visibility',
'value' => 'hidden',
'compare' => '!=',
)
)
Aceasta va extrage toate articolele care nu au meta _visibility egal cu hidden.
Perfect. Exact asta aveam nevoie. Pentru oricine caută acest răspuns, aici este interogarea completă menționată mai sus.
<?php
$params = array('posts_per_page' => -1, 'post_type' => 'product', 'orderby' => 'menu-order', 'order' => 'asc', 'meta_query' => array(
array(
'key' => '_visibility',
'value' => 'hidden',
'compare' => '!=',
)
));
$wc_query = new WP_Query($params);
?>
Peter Ingersoll
@PeterIngersoll FYI, poți marca acest răspuns ca acceptat pentru a arăta și viitorilor vizitatori ce a funcționat pentru tine :) Există o bifă în stânga răspunsului lui Howdy. Citește mai multe aici: http://wordpress.stackexchange.com/help/someone-answers
Tim Malone