WP_Query: Escludere prodotti nascosti dall'elenco prodotti WooCommerce
Spero che questo non sia troppo specifico per WooCommerce.
Ho un pratico shortcode che mostra un elenco di tutti i miei prodotti con SKU. Tuttavia, include anche prodotti che ho pubblicato ma ho impostato la visibilità del catalogo su "nascosto".
Non riesco a trovare un argomento/parametro per escludere i prodotti nascosti (o includere solo quelli contrassegnati come Catalogo/Ricerca).
So che deve essere semplice; semplicemente non l'ho trovato. Grazie per qualsiasi aiuto.
Ecco il codice:
<?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>Nome Prodotto</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( 'Nessun Prodotto' ); ?>
</td> </tr>
<?php endif; ?>
</tbody>
</table>

A partire da WooCommerce 3, la visibilità è cambiata in tassonomia invece che meta. Quindi devi cambiare la meta_query in tax_query. Per mostrare solo i prodotti visibili,
'tax_query' => array(
array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'exclude-from-catalog',
'operator' => 'NOT IN',
),
),
ed esempi per i Prodotti in Evidenza
'tax_query' => array(
array(
'taxonomy' => 'product_visibility',
'field' => 'name',
'terms' => 'featured',
),
),
Termini possibili: 'exclude-from-search', 'exclude-from-catalog', 'featured', 'outofstock'.

Importante: Quanto segue funziona solo per versioni di WooCommerce inferiori alla 3.0. Per una risposta più aggiornata, consulta l'altra risposta di kalle.
WooCommerce salva questi dati come metadata
, quindi dovrai eseguire una Meta Query sul nome _visibility
. Qualcosa come:
'meta_query' => array(
array(
'key' => '_visibility',
'value' => 'hidden',
'compare' => '!=',
)
)
Questo estrarrà tutti i post che non hanno il meta _visibility
uguale a hidden
.

Perfetto. Era esattamente quello che mi serviva. Per chiunque cerchi questa risposta, ecco la query completa menzionata sopra.
<?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, puoi contrassegnare questa risposta come accettata per mostrare ai visitatori futuri cosa ha funzionato per te :) C'è un segno di spunta a sinistra della risposta di Howdy. Maggiori informazioni qui: http://wordpress.stackexchange.com/help/someone-answers
