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);
?>
Peter Ingersoll
@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
Tim Malone