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);
?>

@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
