我需要编写一些仅在某些类别页面上隐藏缺货商品的代码。
我试图像这样制作一个pre post钩子:
add_action('pre_get_posts','filter_out_of_stock_discs');
function filter_out_of_stock_discs($query){
if($query->query_vars["post_type"] == "product"){
//...
}
}
我可以在调试器中看到这永远不会被击中,因为没有查询具有产品发布类型的查询变量。
在调用循环之前,我还尝试将其添加到分类产品页面:
global $wp_query;
$wp_query->set("meta_query", array(
array(
'key' => '_stock_status',
'value' => 'instock'
),
array(
'key' => '_backorders',
'value' => 'no'
),
)
);
但这并没有任何改变。
如何拦截查询以修改它是否检查库存状态?
答案 0 :(得分:0)
Woocommerce有自己的过滤器。这对我有用:
add_action( 'woocommerce_product_query','filter_out_of_stock_prod', 10, 2);
function filter_out_of_stock_prod($q, $wc_query){
$meta_query = $q->get( 'meta_query' );
$meta_query[] = array(
'key' => '_stock_status',
'value' => 'instock',
'compare' => '='
);
$q->set( 'meta_query', $meta_query );
}