Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Woocommerce中的元查询从任何地方排除特定产品_Php_Wordpress_Woocommerce_Widget_Product - Fatal编程技术网

Php 使用Woocommerce中的元查询从任何地方排除特定产品

Php 使用Woocommerce中的元查询从任何地方排除特定产品,php,wordpress,woocommerce,widget,product,Php,Wordpress,Woocommerce,Widget,Product,我想从我的商店页面中排除来自给定城市的产品,但也要从我的主页中排除,我在主页中显示来自flatsome UX Builder的woocommerce商店小部件(不确定它是小部件)的产品 给定城市的产品不会出现在我的店铺页面中,但它们仍会出现在我的主页中 add_filter( 'pre_get_posts', 'custom_pre_get_posts_query' ); function custom_pre_get_posts_query( $q ) { if ($q->is_

我想从我的商店页面中排除来自给定城市的产品,但也要从我的主页中排除,我在主页中显示来自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' );
    }
}

有什么想法吗?

您可以使用专用的
woocommerce\u product\u query\u meta\u query
过滤器钩子,而不是使用
预获取帖子
过滤器钩子对产品循环进行
元查询

现在,对于您的问题,它可能是一个小部件或使用的短代码,因此也有一些专用的钩子

由于3个挂钩函数的
meta_查询
类似,您可以在自定义函数中设置它,并通过以下方式在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文件


这应该能用…

非常好用,谢谢!!(重命名快捷码函数后)我已经回答了您的最后一个问题…请尝试一下。