get_posts được gán cho một thuật ngữ phân loại tùy chỉnh cụ thể và không phải là con của thuật ngữ


18

Nói rằng tôi có các điều khoản phân loại sau:

Term 1
  Term 1.1
  Term 1.2
Term 2
  Term 2.1

Làm cách nào tôi chỉ nhận được các bài đăng được gán cho Học kỳ 1 và không bao gồm các bài đăng được gán cho Học kỳ 1.1 hoặc Kỳ 1.2?

Ví dụ:

$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".
    )
  )
);

cũng đang cung cấp cho tôi các bài đăng có Điều khoản 1.1 và 1.2 được chỉ định.

Cảm ơn.

Câu trả lời:


35

Khi xem xét lớp WP_Tax_Query trong /wp-includes/taxonomy.php, tôi thấy rằng có một tùy chọn 'include_children' mặc định là true. Tôi đã sửa đổi lệnh gọi get_posts () ban đầu của mình bằng cách sau và nó hoạt động rất tốt:

$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
    )
  )
));

Danh sách các tham số truy vấn khác: http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameter


3
Đọc từ trang Codex được liên kết đến, tôi nghĩ giá trị của 'trường' trong mảng tax_query phải là 'term_id' thay vì 'id': "Các giá trị có thể là 'term_id', 'name' và 'slug'. 'hạn_id'. " Tôi đoán 'id' chỉ hoạt động vì nó gây ra dự phòng mặc định.
Jani Uusitalo

6

vừa mới bắt gặp điều này vào một ngày khác:

$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'
            )
        )
    )
);

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


1

Đây là mã hoàn chỉnh hy vọng nó sẽ giúp. Cảm ơn

<?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

được sử dụng toán tử 'IN' và nó hoạt động

'phân loại' => 'bộ sưu tập', 'điều khoản' => mảng (28), 'trường' => 'id', 'toán tử' => 'IN'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.