2016-02-21 2 views
0

Я разрабатываю страницу категории. У меня есть цикл, который отображает дочерние категории для текущей категории. Для каждой дочерней категории я хотел бы показать ссылку на последнюю статью. В настоящее время ссылка одинакова для всех дочерних категорий, даже если отображаемая статья не относится к этой категории. Что я делаю не так?Как я могу получить последнее сообщение из категории в WordPress?

<?php 
    $cat_id = get_query_var('cat'); 
    $categories = get_categories(array('parent' => $cat_id)); 
      if(count($categories) > 0): 
       foreach($categories as $cat): 
        $args = array(
         'numberposts' => 1, 
         'offset' => 0, 
         'category' => $cat->cat_ID, 
         'orderby' => 'ID', 
         'order' => 'DESC', 
         'post_type' => 'post', 
         'post_status' => 'publish', 
         'suppress_filters' => true); 

         $the_query = new WP_Query($args); 
         $the_query->the_post(); 
         if ($the_query->have_posts()) : 
          while ($the_query->have_posts()) : $the_query->the_post(); 
           $recent['title'] = get_the_title(); 
           $recent['id'] = get_the_ID(); 
           wp_reset_postdata(); 
          endwhile; 
         endif; 
         wp_reset_postdata(); ?> 


       <div class="media category-list"> 
        <div class="media-body"> 
         <div class="details"> 
          <h3><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a></h3> 
          <p><?php echo $cat->description; ?></p> 
         </div> 
         <dl> 
          <dt>Article Total:</dt><dd><?php echo $cat->count; ?></dd> 
          <dt>Last Article:</dt><dd><a href="<?php echo get_permalink($recent["id"]); ?>"><?php echo substr($recent["title"], 0, 48).'...'; ?></a></dd> 
         </dl> 
        </div> 
       </div> 
       <?php endforeach; 
       endif; ?> 

enter image description here

ответ

0

Похоже, вы используете get_posts аргументы в WP_Query.

  1. category и numberposts не являются допустимыми аргументами для WP_Query
  2. Оба принадлежит get_posts и внутренне преобразуется в cat и posts_per_page
  3. Итак, когда вы передаете эти аргументы в WP_Query он не работает. Но когда вы проходите WP_Query аргументов в get_posts он работает;)

Так обновленные аргументы структура

$args = array(
    'posts_per_page' => 1, 
    'offset' => 0, 
    'cat' => $cat->cat_ID, 
    'orderby' => 'ID', 
    'order' => 'DESC', 
    'post_type' => 'post', 
    'post_status' => 'publish', 
    'suppress_filters' => true 
); 

Также, пожалуйста, обновите ваш запрос с этим

$the_query = new WP_Query($args); 
//$the_query->the_post(); 
if ($the_query->have_posts()) : 
    while ($the_query->have_posts()) : $the_query->the_post(); 
     $recent['title'] = get_the_title(); 
     $recent['id'] = get_the_ID(); 
//  wp_reset_postdata(); 
    endwhile; 
endif; 
wp_reset_postdata(); 

the_post следует назвать только один раз и после, когда вы уверены, что в запросе есть сообщения. wp_reset_postdata Сохраните данные для всего запроса. Поэтому нужно сделать это в конце цикла while, не внутри цикла while.

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