wake-up-neo.com

WP_Query: Versteckte Produkte von der WooCommerce-Produktliste ausschließen

Ich hoffe, das ist nicht zu spezifisch für WooCommerce.

Ich habe einen nützlichen Shortcode, der eine Liste aller meiner Produkte mit Artikelnummern anzeigt. Es enthält jedoch auch Produkte, die ich veröffentlicht habe, deren Katalogsichtbarkeit jedoch auf "ausgeblendet" festgelegt wurde.

Ich kann kein Argument/keinen Parameter finden, um versteckte Produkte auszuschließen (oder nur solche, die als Katalog/Suche gekennzeichnet sind).

Ich weiß, dass es einfach sein muss; Ich habe es einfach nicht gefunden. Danke für jede Hilfe.

Hier ist der Code:

<?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>Product Name</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( 'No Products' ); ?>
    </td> </tr>
     <?php endif; ?>
</tbody>
</table>
4
Peter Ingersoll

Wichtig: Das Folgende funktioniert nur für WooCommerce-Versionen unter 3.0. Für eine aktuellere Antwort lesen Sie bitte die andere Antwort von kalle .

WooCommerce speichert diese Daten als metadata, sodass Sie eine Meta Query für den Namen _visibility ausführen müssen. So etwas wie:

'meta_query' => array(
    array(
        'key'       => '_visibility',
        'value'     => 'hidden',
        'compare'   => '!=',
    )
)

Dadurch werden alle Posts abgerufen, bei denen nicht Meta-_visibility gleich hidden ist.

3
Howdy_McGee

Ab Woocommerce 3. Sichtbarkeit wird zu Taxonomie anstelle von Meta geändert . Sie müssen also die meta_query in tax_query ändern. Nur sichtbare Produkte anzeigen,

'tax_query' => array(
    array(
        'taxonomy' => 'product_visibility',
        'field'    => 'name',
        'terms'    => 'exclude-from-catalog',
        'operator' => 'NOT IN',
    ),
),

und Beispiele für vorgestellte Produkte

'tax_query' => array(
    array(
        'taxonomy' => 'product_visibility',
        'field'    => 'name',
        'terms'    => 'featured',
    ),
),

Mögliche Begriffe: "Aus der Suche ausschließen", "Aus dem Katalog ausschließen", "Hervorgehoben", "Ausverkauft".

14
kalle