2014-09-01 2 views
-1

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

<? 
$homepage_cat = get_category_by_slug('home-page-slider'); 

$id = $homepage_cat->cat_ID; 

print($id); 

$sub_cat = get_categories('hide_empty=0&child_of=' . $id); 

print_r($sub_cat); 

    foreach ($sub_cat as $key => $cat) 
    { 
     echo $cat->term_id; 
     query_posts('cat=' . $cat->term_id); 
     if (have_posts()) 
     { echo '<h1> HELL YEAH </h1>'; 
      while (have_posts()) 
      { 
       echo '<h1>' get_the_title(); '</h1>'; 
      } // end while 
     } // end if 
    } //end foreach 
?> 

Код не returing любых сообщений как HELL YEAH не быть эхом. Может ли кто-нибудь предложить решение?

+0

изменения Try 'showposts 'с' posts_per_page', вам может потребоваться также функция 'setup_postdata'. –

+0

Спасибо Tomas, как бы использовать функцию setup_postdata? Я не думаю, что это проблема, поскольку я получаю желаемое количество категорий, которое равно 3. Однако, когда я прохожу через эти три, чтобы получить последний пост, он возвращает 3 пустых массива, по одному для каждой категории. – Mantissa

+0

Где вы устанавливаете эту переменную '$ homepage_cat'? –

ответ

0

Там нет немало проблем здесь

  • Прежде всего, никогда не используйте query_posts для построения пользовательских запросов. Он ломает основной запрос, является ненадежным и сходу не удается в большинстве случаев в пагинацией

  • Во-вторых, у вас есть, чтобы сбросить POSTDATA после каждого пользовательского запроса

  • В-третьих, никогда не используйте короткие теги. Всегда используйте полный тег т.е. <?php, а не только <?

  • Наконец, вам не хватает the_post(), который должен возвращать сообщение объекты

Ваш запрос должен выглядеть как этот

<?php 
$homepage_cat = get_category_by_slug('home-page-slider'); 

$id = $homepage_cat->cat_ID; 

print($id); 

$sub_cat = get_categories('posts_per_page=1&hide_empty=0&child_of=' . $id); 

print_r($sub_cat); 

    foreach ($sub_cat as $key => $cat) 
    { 
     echo $cat->cat_ID; 
     $q = new WP_Query('cat=' . $cat->cat_ID); 
     if ($q->have_posts()) 
     { echo '<h1> HELL YEAH </h1>'; 
      while ($q->have_posts()) 
      { 
       $q->the_post(); 
       echo '<h1>' get_the_title(); '</h1>'; 
      } // end while 
     } // end if 
     wp_reset_postdata(); 
    } //end foreach 
?> 
+0

Любой прогресс на данный момент по вашей проблеме :-) –

+0

Да, это была глупая ошибка от моего имени. Я запрашивал пользовательский тип сообщения. Сайт содержит только персонализированные типы сообщений, и, хотя они будут попадать в общую категорию сообщений и будут возвращены. Это предположение было неверным. Таким образом, как только я определил тип сообщения, он работал по желанию. Спасибо, ваш ответ был очень полезен в отношении структуры запросов и позволил мне устранить возможные варианты. – Mantissa

-1

Заменить этот

$post_args = array(
    'showposts' => 1, 
    'cat' => $cat->term_id 
); 

с этим.

$post_args = array(
    'posts_per_page' => 1, 
    'category' => $cat->term_id 
); 

Я надеюсь, что это сработает.

+0

Без радости с этим. – Mantissa

1

Использовать get_posts() не query_posts, это лучше для таких ситуаций.

$args = array('posts_per_page' => 1, 'category' => $cat->term_id); 
$posts = get_posts($args); 

foreach($posts as $post) : setup_postdata($post) ?> 
    <h1><?php get_the_title(); ?></h1> 
<?php endforeach; ?> 
Смежные вопросы