woocommerce POS pos only meta_query不能使用显示商店页面作为类别
问题描述:
我试图从我的商店删除商品,该商品有0个库存或 仅标记为POS,但由于某种原因只有0个库存部分有效。woocommerce POS pos only meta_query不能使用显示商店页面作为类别
这是我的代码。我究竟做错了什么?
/****
Functions to remove items from store that have 0 stock
*****/
add_action('pre_get_posts', 'custom_pre_get_posts_query');
function custom_pre_get_posts_query($q) {
if (! $q->is_main_query()) return;
if (! $q->is_post_type_archive()) return;
if (! is_admin()) {
$meta_query = $q->get('meta_query');
$meta_query[] = array(
'key' => '_pos_visibility',
'value' => 'pos_only',
'compare' => '!='
);
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!='
);
$q->set('meta_query', $meta_query);
}
$q->set('orderby', array('date' => 'DESC'));
remove_action('pre_get_posts', 'custom_pre_get_posts_query');
}
感谢 利奥
答
好吧,我想出了一些事情。
- 这似乎只是使用WooCommerce->设置 - >产品 - >显示器商店页面显示未设置为产品的问题。即它被设置为类别或类别和产品。
这是我用来最终解决它的代码。
add_action('woocommerce_product_query', 'hss_shop_query', 10 , 2);
function hss_shop_query($q, $that)
{
// $q->set('author', $vendor_id);
if (! is_admin() ) {
$meta_query = $q->get('meta_query');
if (!is_array($meta_query)){
$meta_query = array();
}
$bHasPOSVisibility = false;
$bHasOutOfStock = false;
foreach ($meta_query as $mq) {
if ($q->key == '_pos_visibility'){
$bHasPOSVisibility = true;
} else if ($q->key == '_stock_status'){
$bHasOutOfStock = true;
}
}
if (!$bHasPOSVisibility){
$meta_query[] = array(
'key' => '_pos_visibility',
'value' => 'pos_only',
'compare' => '!='
);
}
if (!$bHasOutOfStock){
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!='
);
}
$q->set('meta_query', $meta_query);
}
//error_log("Query: ".var_export($q, true));
}
我不知道我是否需要检查它是否已经在查询或不存在,但我把它放在了未来的兼容性,如果他们解决这个问题。
答
你必须使用一个以上的meta query
当定义一个relation
。你可以写类似:
$meta_query = array(
'relation' => 'OR',
array(
'key' => '_pos_visibility',
'value' => 'pos_only',
'compare' => '!='
),
array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!='
)
);
如果我没有记错,一个meta query
需要一个数组数组作为参数,它可以包含与meta queries
多个阵列。现在您给出meta query
两个数组作为参数。
希望这会有所帮助。
+0
关系是默认的AND。而且是我想要的。 – Leo
我想知道如果我的解决方案成功了 – Kevinvhengst