WP_Query: Escludere prodotti nascosti dall'elenco prodotti WooCommerce

30 giu 2016, 20:38:08
Visualizzazioni: 19.7K
Voti: 7

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>
1
Commenti

Vorrei far notare che questo codice alla fine fallirà in modo catastrofico a causa del posts_per_page impostato su -1. Pochi server sarebbero in grado di gestire questo codice con 1000 post, figuriamoci con 20.000. Moltiplica questo per il numero di visitatori che arrivano sul tuo sito

Tom J Nowell Tom J Nowell
3 dic 2016 23:10:14
Tutte le risposte alla domanda 2
0
24

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'.

6 apr 2017 08:50:01
2

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.

30 giu 2016 20:44:17
Commenti

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 Peter Ingersoll
30 giu 2016 21:39:04

@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 Tim Malone
5 lug 2016 10:57:59