我使用三种可用性状态:"库存中"、"缺货"answers"允许延期订单"。我想要将仅处于"库存"状态的产品导出为XML。问题是,wooccommerce在两种状态下都返回值"instock":"库存中"answers"允许延期订单"。现在查询看起来像:
$query = array(
'post_type' => 'product',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'instock'
)
)
);
$wp_query = & new WP_Query($query);
while ($wp_query->have_posts()) : $wp_query->the_post();
它导出具有"库存"answers"允许延期订单"状态的产品。也许有一种方法可以排除带有"backorders_allowed"的产品。
您可以有多个meta_query过滤器。请参阅(http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters)。默认情况下,这些筛选器之间的关系是AND,这是可以的。您可以为_back_order = no
添加一个筛选器。
$query = array(
'post_type' => 'product',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'instock'
),
array(
'key' => '_backorders',
'value' => 'no'
),
)
);
$wp_query = & new WP_Query($query);
while ($wp_query->have_posts()) : $wp_query->the_post();
强烈建议使用WC_Product_Query()
而不是WP_Query()
。
所以,我展示了如何使用WC_Product_Query()
来实现这一点。
$query_args = array(
'limit' => 10, //or whatever number of products you want to get.
'stock_status' => 'instock' // or 'outofstock' or 'onbackorder'
);
$query = new WC_Product_Query( $query_args );
$products = $query->get_products();
注意:如果要包含多个stock_status,只需使用一个数组即可。
'stock_status' => array('instock', 'outofstock', 'onbackorder')