2015-12-21 156 views
-1

我想查詢不是父級帖子的帖子。
張貼1
- 後2
- 發佈3
後4
- 發佈5
郵政6
因此,它應該僅顯示郵政2,柱3,柱5
此代碼僅顯示父一個,它應該如何查詢查詢所有子帖子wordpress帖子查詢參數查詢子帖子

$query = new WP_Query(array( 
    'post_type' => 'drama', 
    'paged' => $paged, 
    'post_parent' => 0 
)); 

回答

0

你可以使用WP_Query兩次來列出它。請考慮下面的代碼

<?php 
 
$query = new WP_Query(array('post_type' => 'drama', 'paged' => $paged, 'post_parent' => 0)); 
 
if ($query->have_posts()) : ?> 
 
    <?php while ($query->have_posts()) : $query->the_post(); ?> 
 
     <?php $parent_id = get_the_ID();  
 
     \t \t $child_query= new WP_Query(array('post_type' => 'drama', 'post_parent' => $parent_id));  
 
     \t \t if ($child_query->have_posts()) : 
 
     \t \t \t while ($child_query->have_posts()) : $child_query->the_post(); 
 
     \t \t \t \t //show post 
 
     \t \t \t endwhile; 
 
     \t \t endif; 
 
     \t \t wp_reset_postdata(); 
 
     \t ?> 
 
    <?php endwhile;?> 
 
<?php endif; ?>

+0

這是相當昂貴的運行。另外,在上面的示例中,您正在運行4個查詢,而不是2個 –

0

您將需要運行2個查詢,但我們需要的是聰明在這裏,因爲它會變得非常昂貴,特別是如果你開始使用多個查詢通過foreach循環。

下面是我們會做:

  • 運行我們的第一個查詢,收集頂級網頁頁ID的。這將是很瘦的查詢,我們將不會從頁面返回任何其他不必要的POSTDATA,除了自己的ID

  • 我們將運行第二個查詢和簡單地排除(post__not_in)頂級頁面,這將是一個數組ID的,我們從第一個查詢

來到這裏是所有的代碼

// Get all parent pages to exclude 
$args1 = [ 
    'post_type' => 'drama', 
    'post_parent' => 0, // Only return top level pages 
    'nopaging' => true, // Alias of posts_per_page => -1, Get all top level pages 
    'fields'  => 'ids' // Only get pages ID's for performance 
]; 
$exclude_parents = get_posts($args1); 

// Now we can run our query as normal 
$args = [ 
    'post_type' => 'drama', 
    'post__not_in' => $excluse_parents, // Exclude parent pages 
    'paged'  => $paged, 
]; 
$query = new WP_Query($args); 

// Run your loop as normal