get_posts는 용어의 하위 항목이 아닌 특정 사용자 정의 분류 체계 용어에 할당됩니다.


18

다음 분류 용어가 있다고 가정 해보십시오.

Term 1
  Term 1.1
  Term 1.2
Term 2
  Term 2.1

용어 1에 할당 된 게시물 만 받고 용어 1.1 또는 1.2에 할당 된 게시물은 어떻게 얻을 수 있습니까?

예를 들면 다음과 같습니다.

$pages = get_posts(array(
  'post_type' => 'page',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'taxonomy-name',
      'field' => 'id',
      'terms' => 1 // Where term_id of Term 1 is "1".
    )
  )
);

용어 1.1 및 1.2가 지정된 게시물도 제공합니다.

감사.

답변:


35

/wp-includes/taxonomy.php의 WP_Tax_Query 클래스를 살펴보면 기본값이 true 인 'include_children'옵션이 있음을 발견했습니다. 원래 get_posts () 호출을 다음과 같이 수정했으며 훌륭하게 작동합니다.

$pages = get_posts(array(
  'post_type' => 'page',
  'numberposts' => -1,
  'tax_query' => array(
    array(
      'taxonomy' => 'taxonomy-name',
      'field' => 'term_id', 
      'terms' => 1, /// Where term_id of Term 1 is "1".
      'include_children' => false
    )
  )
));

추가 쿼리 매개 변수 목록 : http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters


3
Codex 페이지에 연결된 tax_query 배열의 'field'값은 'id'가 아니라 'term_id'여야합니다. "가능한 값은 'term_id', 'name'및 'slug'입니다. 기본값은 'term_id'. " 'id'는 기본값으로 폴백하기 때문에 작동합니다.
Jani Uusitalo

6

다른 날에이 문제가 발생했습니다.

$tax = 'music';
$oterm = 'pop';
$term = get_term_by('slug', $oterm, $tax);
$termChildren = get_term_children($term->term_id, $tax);
$wp_query = new WP_Query();
$wp_query->query(
    array(
        'posts_per_page' => '5',
        'tax_query' => array(
            array(
                'taxonomy' => $tax,
                'field' => 'slug',
                'terms' => $oterm
            ),
            array(
                'taxonomy' => $tax,
                'field' => 'id',
                'terms' => $termChildren,
                'operator' => 'NOT IN'
            )
        )
    )
);

출처 : http://return-true.com/2011/08/wordpress-display-posts-from-a-term-without-displaying-posts-from-child-terms/


1

여기에 도움이되는 완전한 코드 희망이 있습니다. 감사

<?php 
$terms_array = array( 
  'taxonomy' => 'services', // you can change it according to your taxonomy
  'parent'   => 0 // If parent => 0 is passed, only top-level terms will be returned
);
$services_terms = get_terms($terms_array); 
foreach($services_terms as $service): ?>
<h4><?php echo $service->name; ?></h4>
<?php 
$post_args = array(
      'posts_per_page' => -1,
      'post_type' => 'service', // you can change it according to your custom post type
      'tax_query' => array(
          array(
              'taxonomy' => 'services', // you can change it according to your taxonomy
              'field' => 'term_id', // this can be 'term_id', 'slug' & 'name'
              'terms' => $service->term_id,
          )
      )
);
$myposts = get_posts($post_args); ?>
<ul>
<?php foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
  <li>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
  </li>
<?php endforeach; // Term Post foreach ?>
</ul>
<?php wp_reset_postdata(); ?>

<?php endforeach; // End Term foreach; ?>  

0

연산자 'IN'을 사용하고 작동합니다.

'taxonomy'=> 'collections', 'terms'=> array (28), 'field'=> 'id', 'operator'=> 'IN'

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.