WP_QUERY中每个帖子类型的不同选项

时间:2020-11-10 作者:RaWa

我有两种职位类型(A型和B型)和两种分类法(tax-1和tax-2),都分配给每种职位类型。这意味着A类帖子可以包含tax-1和tax-2中的术语,而B类帖子也可以包含tax-1和tax-2中的术语。

我希望我的WP\\u查询输出来自type-A的所有包含tax-1某些术语的帖子。但我不想输出包含这些tax-1术语的B类帖子,不幸的是,我的WP\\U查询会这样做。同样的情况也应适用于tax-2,即只有包含tax-2条款的B类职位才应输出。

我已经尝试为此创建两个$参数,但我没有成功合并这两个$参数。

function my_function($args) {
    global $post;

    $args = array(
            \'post_type\' => array(\'type-A\',\'type-B\'),
            \'tax_query\' => array(
                \'relation\'  => \'OR\',
                 array(
                    \'taxonomy\' => \'tax-1\',
                    \'field\'    => \'term_id\',
                    \'terms\'    => array(11, 12, 13),
                ),
                array(
                    \'taxonomy\' => \'tax-2\',
                    \'field\'    => \'term_id\',
                    \'terms\'    => array(21, 22, 23),
                ),
            ),
        );

    return $args;
} 

1 个回复
最合适的回答,由SO网友:admcfajn 整理而成

你可以使用pre_get_posts 要根据帖子类型有条件地添加tax\\u查询,下面是一个简单的示例。

<?php
function wpse_377928( $the_query ){
  $post_type = $the_query->get(\'post_type\');
  if ( \'type_a\' === $post_type ) {
    $tax_query = [
        [
            \'taxonomy\' => \'tax-1\',
            \'field\'    => \'term_id\',
            \'terms\'    => array(11, 12, 13),
        ]   
    ];
  } 
  elseif ( \'type_b\' === $post_type ) {
      $tax_query = [
        [
            \'taxonomy\' => \'tax-2\',
            \'field\'    => \'term_id\',
            \'terms\'    => array(21, 22, 23),
        ]   
    ];
  }

  if ( !empty( $tax_query ) ) {
      $the_query->set( \'tax_query\', $tax_query );
  }

}
add_action(\'pre_get_posts\', \'wpse_377928\');