我编写了一个函数,如果满足某些需求,它会隐藏产品可见性,如果我使用以下过滤器,它就会工作。
add_filter(\'woocommerce_product_is_visible\', \'tm_remove_product_stock_region\', 10,2);
以上是可以的,但当我尝试使用以下方法全局应用我的过滤器时,使用WP\\u Query是行不通的。add_action(\'pre_get_posts\', \'tm_remove_product_stock_region\');
我发现以下两个错误:“注意:未定义变量:product\\u id”,“警告:缺少参数2”我就是想不出问题出在哪里。
function tm_remove_product_stock_region($query) {
$product_variable = new WC_Product_Variable();
$product_variations = $product_variable->get_available_variations();
foreach ( $product_variations as $variation ) {
/** Get users region. */
$user_region = tm_get_user_region();
/** Get products regions. */
$product_region = $variation[\'attributes\'][\'attribute_pa_regions\'];
if ( $user_region === $product_region && ! $variation[\'is_in_stock\'] ) {
/** Show product */
$meta_query = array(
\'key\' => \'_visibility\',
\'value\' => \'visible\',
\'compare\' => \'=\'
);
$query->set(\'meta_query\', $meta_query);
}
else if ( $user_region === $product_region && $variation[\'is_in_stock\'] ) {
/** Hide product */
$meta_query = array(
\'key\' => \'_visibility\',
\'value\' => \'hidden\',
\'compare\' => \'=\'
);
$query->set(\'meta_query\', $meta_query);
}
}
return $query;
}
//Look into apply_filter
add_action(\'pre_get_posts\', \'tm_remove_product_stock_region\');