繁体   English   中英

WP_Query多个类别参数不起作用

[英]WP_Query Multiple Category Parameters not working

情况:我无法成功地在WP_Query中的类别参数中搜索到两个类别,这些类别混合了OR和AND关系。

说明:我有一个按地区,月份和年份排序的搜索/过滤器,效果很好! 使用category_name参数时,它将成功搜索区域。

<?php // These grab data from the URL which are submitted by the form
$p_topi = $_GET['topic'];
$p_reg = $_GET['region'];
$p_mon = $_GET['mon'];
$p_year = (int) $_GET['yr'];
?>

<?php 
    $archive_args = array(
        'post_type' => 'thought_leadership',
        'category_name' => $p_reg, // Pay attention to this
        'year' => $p_year,
        'monthnum'=> $p_mon,
        'posts_per_page' => 100,
    );
    $archive_query = new WP_Query($archive_args);
    if ($archive_query->have_posts()) : while ($archive_query->have_posts()) : $archive_query->the_post(); ?>

我被要求添加按主题排序。 我通过用category_name替换变量来测试它,效果很好。

$archive_args = array(
        'post_type' => 'thought_leadership',
        'category_name'  => $p_topi, // Changed the variable to topic
        'year' => $p_year,
        'monthnum'=> $p_mon,
        'posts_per_page' => 100,
    );

然后,我尝试将两个变量组合在一起,并且可以正常工作。 具体来说,它用作OR运算符,可以按区域或主题进行过滤。 不会同时过滤两者。

$archive_args = array(
        'post_type' => 'thought_leadership',
        'category_name'  => "$p_topi, $p_reg", // Combined the variables
        'year' => $p_year,
        'monthnum'=> $p_mon,
        'posts_per_page' => 100,
    );

然后,我尝试使用+符号使参数同时接受两个变量。 它可以工作,但是现在不能用作OR运算符。 换句话说,我必须选择一个主题和地区,否则搜索将找不到任何结果。

$archive_args = array(
        'post_type' => 'thought_leadership',
        'category_name'  => "$p_topi+$p_reg", // + makes it an AND operator
        'year' => $p_year,
        'monthnum'=> $p_mon,
        'posts_per_page' => 100,
    );

我研究了WP_Query,并找到了出色的参考资料: https ://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

我尝试了category__and但是它没有匹配该条件的帖子返回。

$archive_args = array(
        'post_type' => 'thought_leadership',
        'category__and'  => array( 12, 5 ), // 12 = ID for topic, 5 = ID for region
        'year' => $p_year,
        'monthnum'=> $p_mon,
        'posts_per_page' => 100,
    );

我还测试了category__in但是发现它不会显示该类别的子级。 这是一个问题,因为主题和地区都有孩子。 就像category__and一样,它返回时没有符合该条件的帖子。

$archive_args = array(
        'post_type' => 'thought_leadership',
        'category__in'  => array( 12, 5 ),
        'year' => $p_year,
        'monthnum'=> $p_mon,
        'posts_per_page' => 100,
    );

如@Muhammad tayyab所建议,我尝试使用tax_query 我让它在&&的基础上工作。

$archive_args = array(
        'post_type' => 'thought_leadership',
        'year' => $p_year,
        'monthnum'=> $p_mon,
        'posts_per_page' => 100,
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category', // correct
                'field' => 'slug', // correct
                'terms' => $p_reg,
            ),
            array(
                'taxonomy' => 'category', // correct
                'field' => 'slug', // correct
                'terms' => $p_topi,
            )
        ,)
    );

但是我无法成功使OR运算符与嵌套数组一起使用。

$archive_args = array(
        'post_type' => 'thought_leadership',
        'year' => $p_year,
        'monthnum'=> $p_mon,
        'posts_per_page' => 100,
        'tax_query' => array(
            'relation' => 'OR',
            array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => $p_reg,
            ),
            array(
                'relation' => 'AND',
                array(
                    'taxonomy' => 'category',
                    'field' => 'slug',
                    'terms' => $p_reg,
                ),
                array(
                    'taxonomy' => 'category',
                    'field' => 'slug',
                    'terms' => $p_topi,
                ),
            ),
        ),
    );

主要问题:您是否知道创建包含0、1或2个参数的搜索的任何方式? 换句话说,我需要进行设置,以便我的用户可以搜索区域和/或主题,或者根本不搜索。

您的问题含糊,但这可能会有所帮助:

$args = array(
  'post_type' => 'post',
  'tax_query' => array(
      'relation' => 'AND',
      array(
          'taxonomy' => 'movie_genre',
          'field'    => 'slug',
          'terms'    => array( 'action', 'comedy' ),
      ),
      array(
        'taxonomy' => 'actor',
        'field'    => 'term_id',
        'terms'    => array( 103, 115, 206 ),
        'operator' => 'NOT IN',
      ),
  ),
);
$query = new WP_Query( $args );

您可以通过多种分类法进行搜索。 您可以在使用relation到指定andnot关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM