2009-11-22 4 views
7

Je suis nouveau à Wordpress et je me suis arraché les cheveux en essayant de créer une boucle de catégorie. La boucle est censé:En boucle dans les catégories de wordpress

    boucle
  1. dans toutes les catégories
  2. écho le nom de la catégorie (avec lien vers
  3. écho les 5 derniers messages dans cette catégorie (avec permalien pour poster)

Le html pour chaque serait

<div class="cat_wrap"> 
    <div class="cat_name"> 
     <a href="<?php get_category_link($category_id); ?>">Cat Name</a> 
    </div> 
    <ul class="cat_items"> 
     <li class="cat_item"> 
     <a href="permalink">cat item 1</a> 
     </li> 
     <li class="cat_item"> 
     <a href="permalink">cat item 2</a> 
     </li> 
     <li class="cat_item"> 
      <a href="permalink">cat item 3</a> 
     </li> 
     <li class="cat_item"> 
     <a href="permalink">cat item 4</a> 
     </li> 
     <li class="cat_item"> 
     <a href="permalink">cat item 5</a> 
     </li> 
    </ul> 
</div> 

S'il vous plaît aider

+0

est-ce la section du modèle ou les autres fichiers? – streetparade

Répondre

6

Hy garder les choses simples voici comment vous pouvez résoudre

<?php wp_list_categories('show_count=1&title_li=<h2>Categories</h2>'); ?> 
+1

Oui, utilisez wp_list_categories et dans Settings-Reading, réglez vos "pages de blog au plus" à 5. – Michael

+0

Le seul problème avec wp_list_categories() est que vous ne pouvez pas contrôler sa sortie dans une mesure décente. –

8

Oops, a raté que vous vouliez 5 messages

<?php 
//for each category, show 5 posts 
$cat_args=array(
    'orderby' => 'name', 
    'order' => 'ASC' 
    ); 
$categories=get_categories($cat_args); 
    foreach($categories as $category) { 
    $args=array(
     'showposts' => 5, 
     'category__in' => array($category->term_id), 
     'caller_get_posts'=>1 
    ); 
    $posts=get_posts($args); 
     if ($posts) { 
     echo '<p>Category: <a href="' . get_category_link($category->term_id) . '" title="' . sprintf(__("View all posts in %s"), $category->name) . '" ' . '>' . $category->name.'</a> </p> '; 
     foreach($posts as $post) { 
      setup_postdata($post); ?> 
      <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p> 
      <?php 
     } // foreach($posts 
     } // if ($posts 
    } // foreach($categories 
?> 
+0

J'ai trouvé que les besoins en ligne 'global $ post;' ajoutés en haut, [https://codex.wordpress.org/Function_Reference/setup_postdata](https://codex.wordpress.org/Function_Reference/setup_postdata) – MrG

+0

@MrG Sauf si vous l'utilisez dans la boucle, oui. –

1

J'ai fait ce morceau de code à boucle à travers le imbriquée catégories Partage.

 //Start on the category of your choice  
     ShowCategories(0); 

     function ShowCategories($parent_category) { 
       $categories = get_categories(array('parent' => $parent_category, 'hide_empty' => 0)); 
       foreach ($categories as $category) { 
        ?><ul><li><?=$category->cat_name;?><? 
        ShowCategories($category->cat_ID); 
        ?></li></ul><? 
       } 
     } 
0

Jetez un oeil à cette autre thread Stackoverflow:

https://wordpress.stackexchange.com/questions/346/loop-through-custom-taxonomies-and-display-posts/233948#233948

J'ai posté une réponse que j'utilise dans la production et fonctionne comme un charme. N'oubliez pas d'ajuster les arguments pour afficher seulement 5 messages, au lieu de tous.

$args = array('showposts' => 5); 

Ajouter « showposts » => 5 à votre tableau en cours d'arguments dans la boucle qui itère à travers les postes de chaque catégorie.