我想从我的商店页面中排除某个城市的产品,也可以从我的主页中排除产品,其中我展示了来自flatsome UX Builder的woocommerce商店小部件的产品(不确定它是一个小部件)。
具有指定城市的产品未显示在我的商店页面中,但它们仍会显示在我的主页中。
add_filter( 'pre_get_posts', 'custom_pre_get_posts_query' );
function custom_pre_get_posts_query( $q ) {
if ($q->is_main_query())
{
$meta_query = $q->get('meta_query');
$meta_query[] = array(
'key'=>'city',
'value' => 'Cassis',
'compare'=>'NOT EXISTS',
);
$q->set('meta_query',$meta_query);
remove_filter( 'pre_get_posts', 'custom_pre_get_posts_query' );
}
}
有什么想法吗?
答案 0 :(得分:1)
您可以使用专用的 pre_get_posts
过滤器钩子,而不是对产品循环上的meta_query
使用 woocommerce_product_query_meta_query
过滤器挂钩
现在您的问题可能是小部件或使用的短代码,因此还有一些专用的钩子。
由于3个钩子函数的meta_query
类似,你可以在自定义函数中设置它并以这种方式在3个钩子函数中调用它:
// The meta query in a function
function custom_meta_query( $meta_query ){
$meta_query[] = array(
'key'=>'city',
'value' => 'Cassis',
'compare'=>'NOT EXISTS',
);
return $meta_query;
}
// The main shop and archives meta query
add_filter( 'woocommerce_product_query_meta_query', 'custom_product_query_meta_query', 10, 2 );
function custom_product_query_meta_query( $meta_query, $query ) {
if( ! is_admin() )
return custom_meta_query( $meta_query );
}
// The shortcode products query
add_filter( 'woocommerce_shortcode_products_query', 'custom__shortcode_products_query', 10, 3 );
function custom__shortcode_products_query( $query_args, $atts, $loop_name ) {
if( ! is_admin() )
$query_args['meta_query'] = custom_meta_query( $query_args['meta_query'] );
return $query_args;
}
// The widget products query
add_filter( 'woocommerce_products_widget_query_args', 'custom_products_widget_query_arg', 10, 1 );
function custom_products_widget_query_arg( $query_args ) {
if( ! is_admin() )
$query_args['meta_query'] = custom_meta_query( $query_args['meta_query'] );
return $query_args;
}
代码放在活动子主题(或活动主题)的function.php文件中。
这应该有用......