WP_QUERY:从WooCommerce产品列表中排除隐藏产品

时间:2016-06-30 作者:Peter Ingersoll

我希望这对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>

2 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

Important: 以下仅适用于低于3.0的WooCommerce版本。有关最新答案,请参阅其他answer by kalle.

WooCommerce将此数据另存为metadata 所以你需要运行Meta Query 反对该名称_visibility. 类似于:

\'meta_query\' => array(
    array(
        \'key\'       => \'_visibility\',
        \'value\'     => \'hidden\',
        \'compare\'   => \'!=\',
    )
)
这将拉动所有do not 有元_visibility 等于hidden.

SO网友:kalle

截至Woocommerce 3。可见性为changed to taxonomy instead of meta. 因此,您需要将meta\\u查询更改为tax\\u查询。仅显示可见产品,

\'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\',
    ),
),
可能的术语:“从搜索中排除”、“从目录中排除”、“精选”、“库存不足”。