web-dev-qa-db-ja.com

WP_Query:WooCommerceの商品リストから隠された商品を除外

これがWooCommerceに固有のものではないことを願っています。

私はSKUと私のすべての製品のリストを表示する気の利いたショートコードを持っています。ただし、私が公開したがカタログの表示設定を「非表示」に設定した商品も含まれます。

非表示の商品を除外する引数/パラメータが見つかりません(またはカタログ/検索とマークされている商品のみを含める).

私はそれが簡単でなければならないことを知っています。私はそれを見つけていません。助けてくれてありがとう。

これがコードです:

<?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

重要:以下は、3.0未満のWooCommerceバージョンでのみ機能します。最新の回答については、他の kalleによる回答 を参照してください。

WooCommerceはこのデータをmetadataとして保存するため、名前_visibilityに対して Meta Query を実行する必要があります。何かのようなもの:

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

これにより、ないメタ_visibilityhiddenに等しいすべての投稿がプルされます。

3
Howdy_McGee

Woocommerce 3から。可視性は メタではなく分類法に変更されました 。したがって、meta_queryをtax_queryに変更する必要があります。目に見える商品だけを表示するには、

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

おすすめ商品の一覧と例

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

可能な用語:「検索から除外」、「カタログから除外」、「おすすめ」、「在庫切れ」。

14
kalle