这种方法在一个阶段工作,但在经过一系列变化后开始不过滤时失去了跟踪。希望答案盯着脸上的某个人。在我的孩子主题functions.php
,我有:
function shop_store_filter() {
if (is_shop() || is_product_category() || is_product()) {
add_filter( 'woocommerce_product_query_meta_query', 'storeFilter', 9 );
}
}
function storeFilter($meta_query) {
$meta_query[] = array(
'post_type' => 'product',
'meta_query' => array(
array(
'key' => '_product_attributes',
'value' => $_GET["sid"],
'compare' => 'LIKE',
'type' => 'product'
)
)
);
return $meta_query;
}
add_action( 'wp', 'shop_store_filter' );
我得到一个空的$meta_query
数组,用于从class-wc-query.php
调用此过滤器的位置,所以它就像它没有像上面那样注册。我已经确认is_shop()
是真的。
有什么建议?
编辑
我想从下面的评论中强调两件事,这些评论可能被误解了:
1)我已经说过建议示例正在运行。它不是分类法,我试图过滤的值是商店ID,因此并不意味着有一组确定的可能值,如颜色。另请参阅此示例:
Woocommerce: Show products filtered by attribute
2)除了查询之外,更大的问题是它所包含的函数似乎不是由woocommerce_product_query_meta_query
过滤器触发的。奇怪,这是我被卡住的地方。
修复 - 查询仍然正常。我不记得为什么我们检查了is_post()...
,但是我把add_filter( 'woocommerce_product_query_meta_query', 'storeFilter', 1 );
移回了自己执行的功能,这没关系。