【问题标题】:Exclude a WooCommerce product category from a WP_Query从 WP_Query 中排除 WooCommerce 产品类别
【发布时间】:2018-05-17 17:58:12
【问题描述】:

我已将以下参数定义为我的查询的一部分:

$args = apply_filters('woocommerce_related_products_args', array(
        'post_type'             => 'product',
        'author'                => $artist,
        'post_status'           => 'publish',
        'meta_query'            => array(
            array(
                'key'           => '_visibility',
                'value'         => array('catalog', 'visible'),
                'compare'       => 'IN'
        )
    )
) );
$products = new WP_Query( $args );

我需要从查询中排除一个名为 Magazines(slug “magazines”)或 ID 351 的类别。

我一直在尝试包含'category__not_in' => array('magazines'),所以它看起来像这样:

$args = apply_filters('woocommerce_related_products_args', array(
            'post_type'             => 'product',
            'author'                => $artist,
            'post_status'           => 'publish',
            'category__not_in'      => array('magazines'),
            'meta_query'            => array(
                array(
                    'key'           => '_visibility',
                    'value'         => array('catalog', 'visible'),
                    'compare'       => 'IN'
            )
        )
    ) );
    $products = new WP_Query( $args );

但这似乎不起作用。

我在这里做错了什么?

【问题讨论】:

  • category__not_in 将 ARRAY 作为参数,将其设为 array('magazines') 并进行检查..!!
  • 您好,更新了我的代码,但仍然无法为我工作..

标签: php wordpress woocommerce categories product


【解决方案1】:

产品类别是自定义分类product_cat

所以你需要用一个简单的tax_query 这样做:

$args = apply_filters('woocommerce_related_products_args', 
    array(
        'post_type'             => 'product',
        'author'                => $artist,
        'post_status'           => 'publish',
        'meta_query'            => array(
             array(
                'key'           => '_visibility',
                'value'         => array('catalog', 'visible'),
                'compare'       => 'IN'
            ),
        ),
        'tax_query'            => array(
            array(
                'taxonomy' => 'product_cat',
                'field'    => 'slug', // Or 'name' or 'term_id'
                'terms'    => array('magazines'),
                'operator' => 'NOT IN', // Excluded
            )
        )
    ) 
);

$products = new WP_Query( $args );

【讨论】:

  • @JoeBloggs 我弄错了……我没注意,但产品类别必须是tax_query,而不是meta_query……我已更新并完成……再试一次
  • 现在你搞定了。现在效果很好。非常感谢您的帮助!
【解决方案2】:

您应该使用category__not_in 值作为这样的数组

$query = new WP_Query( array( 'category__not_in' => array( 'magazines' ) ) );

详情请看这里

WP_Query

所以请更新你的代码到这个

$args = apply_filters('woocommerce_related_products_args', array(
            'post_type'             => 'product',
            'author'                => $artist,
            'post_status'           => 'publish',
            'category__not_in'      => array('magazines')
            'meta_query'            => array(
                array(
                    'key'           => '_visibility',
                    'value'         => array('catalog', 'visible'),
                    'compare'       => 'IN'
            )
        )
    ) );
    $products = new WP_Query( $args );

让我知道它是否适合你。

【讨论】:

  • 您好,非常感谢,但不,我的工作不正常,类别仍在显示..
  • 请尝试使用类别 ID,您可以尝试注释掉元查询部分。然后检查它是否工作?
  • 所以我尝试了 ID 并注释掉了元查询部分并再次尝试使用 slug 或 ID,但这似乎都不起作用。类别仍在显示。
  • 那么请检查过滤器是否真的在工作,或者它是否被某些东西覆盖了。
猜你喜欢
  • 2018-08-26
  • 2019-08-05
  • 2018-11-09
  • 2013-08-11
  • 2019-02-06
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多