WP_Query: Excludează produsele ascunse din lista de produse WooCommerce

30 iun. 2016, 20:38:08
Vizualizări: 19.7K
Voturi: 7

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

Trebuie să menționez că acest cod va eșua în cele din urmă în mod catastrofal din cauza setării posts_per_page la -1. Puține servere ar putea gestiona acest cod când există 1000 de articole, darămite 20.000. Înmulțiți asta cu numărul de vizitatori care ajung pe site-ul dvs.

Tom J Nowell Tom J Nowell
3 dec. 2016 23:10:14
Toate răspunsurile la întrebare 2
0
24

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

6 apr. 2017 08:50:01
2

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.

30 iun. 2016 20:44:17
Comentarii

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

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