2016-02-21 1 views
0

Je suis en train de concevoir la page catégorie. J'ai une boucle qui affiche les catégories enfant pour la catégorie actuelle. Pour chaque catégorie d'enfant, j'aimerais afficher un lien vers le dernier article. Actuellement, le lien est le même pour toutes les catégories enfants, même lorsque l'article affiché ne fait pas partie de cette catégorie. Qu'est-ce que je fais mal?Comment puis-je obtenir le dernier message d'une catégorie dans 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

Répondre

0

On dirait que vous utilisez get_posts arguments WP_Query.

  1. category et numberposts ne sont pas des arguments valables pour WP_Query
  2. deux appartient à get_posts et à l'intérieur converti en cat et posts_per_page
  3. Ainsi, lorsque vous passez ces arguments WP_Query cela ne fonctionne pas. Mais quand vous passez WP_Query arguments get_posts cela fonctionne;)

Ainsi, la structure des arguments mis à jour est

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

également s'il vous plaît mettre à jour votre requête avec cette

$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 doit être appelée uniquement une fois et après lorsque vous êtes sûr que cette requête a des messages. wp_reset_postdata contenir les données pour l'ensemble de la requête. Donc besoin de faire cela à la fin de la boucle while pas à l'intérieur de la boucle while.