2016-02-11 2 views
2

Я сделал этот запрос и работает. У меня много дочерних сообщений, и я планирую отображать только сообщения с детьми при перечислении страницы архива моего пользовательского типа сообщений city- руководство.Исключить родительские сообщения и отображать только дочерние сообщения в архиве

$args = array(
'orderby' => 'date', 
'order' => 'DESC', 
'post_type' => 'city-guide', 
'posts_per_page' => 36, 
'paged' => $paged 
); 

$query = new WP_Query($args); 

?> 
    <?php $i=1; while($query->have_posts()): $query->the_post(); ?> 
{ 

..... 
} 

Я попытался

$all = get_posts(array('post_type'=> 'city-guide', 'posts_per_page' => -1)); 
$parents = array(); 
foreach ($all as $single) 
{ 
    $kids = get_children($single->ID); 
    if(isset($kids) && !empty($kids) && count($kids) >= 1) 
    { 
     $parents[] = $single->ID; 
    } 
    } 

$args = array(
'orderby' => 'date', 
'order' => 'DESC', 
'post_type' => 'city-guide', 
'post__not_in' => $parents, 
'posts_per_page' => 36, 
'paged' => $paged 
); 

$query = new WP_Query($args); 

?> 
    <?php $i=1; while($query->have_posts()): $query->the_post(); ?> 

{ 
.... 
} 

Это не work.Please помочь мне узнать, где я пошло не так.

ответ

0

Я вижу, что вы пытаетесь вставить идентификаторы в массив, но почему бы просто не использовать идентификаторы, пока вы их перебираете, одновременно получая детей в цикле? Ниже приведен пример того, как я буду заниматься этим.

<?php 
$args = array(
    'orderby' => 'date', 
    'order' => 'DESC', 
    'post_type' => 'city-guide', 
    'posts_per_page' => 36, 
    'paged' => $paged 
    ); 

$query = new WP_Query($args); 

$i=1; while($query->have_posts()): $query->the_post(); 

$parentID = get_the_ID(); 

$childrenArgs = array(
      'post_type' => 'page', 
      'post_parent' => $parentID , 
      ); 

     $children = get_children($childrenArgs); 

     foreach ($children as $child){ 

      echo '<h1>' . $child -> post_title . '</h1>'; 

      $content = $child -> post_content; 
      $content = apply_filters('the_content', $content); 
      $content = str_replace(']]>', ']]&gt;', $content); 
      echo $content; 
     } 

endwhile; 

?> 
2

Я знаю, что это старый вопрос, но надеемся, что я смогу помочь кому-то, кто находит свой путь здесь, ища то же самое, что и я.

Вы можете показать только дочерние сообщения исключая любые сообщения с post_parent = 0 с помощью «post_parent__not_in» аргумент:

$args = array(
    'orderby' => 'date', 
    'order' => 'DESC', 
    'post_type' => 'city-guide', 
    'posts_per_page' => 36, 
    'paged' => $paged, 
    'post_parent__not_in' => array(0) 
); 

Это позволяет избежать необходимости в петле через каждый родительский пост, чтобы получить каждый ребенок.

+0

Так просто и эффективно. Благодаря! –

0

Думаю, вам необходимо изучить действие pre_get_posts. Что-то вроде этого в ваших functions.php сделало бы трюк.

function namespace_custom_query_vars($query) { 
    if (!is_admin() && $query->is_main_query()) { 
    if ($query->query["post_type"] == 'custom_post_type') { 
     $query->set('post_parent__not_in', 0); 
    } 
    } 
    return $query; 
} 
add_action('pre_get_posts', 'namespace_custom_query_vars'); 

Есть достойный пост об этом here. Хотя обратите внимание, что код на этой странице не компилируется для небольших синтаксических ошибок.

0

0 Как использовать отношения? Простой дизъюнктивный союз должен сделать шарм.

$args = array(
    'post_type'  => POST_TYPE, 
    'posts_per_page' => 36, 
    'orderby'  => 'date', 
    'order'   => 'DESC', 
    'tax_query'  => array(
          'relation' => 'AND', 
          array(
           'taxonomy' => POST_TAXONOMY, 
           'field' => 'slug', 
           'terms' => $tax_slug, 
           'include_children' => true 
          ), 
          array(
           'taxonomy' => POST_TAXONOMY, 
           'field' => 'slug', 
           'terms' => $tax_slug, 
           'include_children' => false, 
           'operator' => 'NOT IN' 
          ) 
         ) 
); 

Или есть причина, почему бы не рассмотреть это?

 Смежные вопросы

  • Нет связанных вопросов^_^