2009-11-22 21 views
7

Ich bin neu in Wordpress und zog mir die Haare aus dem Versuch, eine Kategorie Schleife zu erstellen. Die Schleife soll:Looping durch WordPress Kategorien

  1. Schleife durch alle Kategorien
  2. die Kategorienamen echo (mit Link zu
  3. Echo der letzten 5 Beiträge in dieser Kategorie aus (mit Permanentlink zu schreiben)

Der hTML-Code für jeden wäre

<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> 

Bitte helfen

+0

ist das der Template-Abschnitt oder die anderen Dateien? – streetparade

Antwort

6

Hy Dinge einfach zu halten hier, wie Sie es

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

Ja, verwende wp_list_categories und setze in "Settings-Reading" deine "Blog-Seiten höchstens" auf 5. – Michael

+0

Das einzige Problem mit wp_list_categories() ist, dass du seine Ausgabe nicht in einem vernünftigen Umfang kontrollieren kannst. –

8

Oops lösen kann, verpasst, dass man 5 Beiträge wollte

<?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

Ich habe gefunden, dass inline 'global $ post;' hinzugefügt werden muss, oben, [https://codex.wordpress.org/Function_Reference/setup_postdata](https://codex.wordpress.org/Function_Reference/setup_postdata) – MrG

+0

@MrG Sofern Sie es nicht innerhalb der Schleife verwenden, ja. –

1

Ich habe dieses Stück Code in einer Schleife durch die verschachtelten gemacht Kategorien. Teilen.

 //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

Werfen Sie einen Blick auf diese andere Stackoverflow thread:

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

ich eine Antwort geschrieben, die ich in der Produktion verwendet werden und wirkt wie ein Zauber.

Denken Sie daran, die Argumente so anzupassen, dass nur 5 Beiträge statt aller angezeigt werden.

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

Add ‚showposts‘ => 5, um Ihre aktuelle Array von Argumenten in der Schleife, dass iteriert durch die Beiträge der jeweiligen Kategorie.