2009-11-22 38 views
7

Soy nuevo en Wordpress y me he estado tirando de pelos tratando de crear un bucle de categoría. El bucle se supone que:Looping a través de las categorías de wordpress

  1. bucle a través de todas las categorías
  2. Echo a cabo el nombre de categoría (con enlace a
  3. eco de los últimos 5 mensajes en esa categoría (con enlace permanente para publicar)

el código hTML para cada uno sería

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

por favor, ayudar a

+0

¿esa es la sección de la plantilla o los otros archivos? – streetparade

Respuesta

6

Hy mantener las cosas simples aquí es cómo se puede resolver

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

Sí, use wp_list_categories y en Configuración-Lectura, establezca sus "páginas de blog muestran como máximo" en 5. – Michael

+0

El único problema con wp_list_categories() es que no puede controlar su salida a un nivel decente. –

8

Vaya, se perdió que querías 5 mensajes

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

Descubrí que las necesidades en línea 'global $ post;' se han agregado a esto en la parte superior, [https://codex.wordpress.org/Function_Reference/setup_postdata](https://codex.wordpress.org/Function_Reference/setup_postdata) – MrG

+0

@MrG A menos que lo estés usando dentro del ciclo, sí. –

1

He hecho este trozo de código a través del bucle anidado categorías. Compartir.

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

Tome un vistazo a este otro hilo Stackoverflow:

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

he publicado una respuesta que yo uso en la producción y funciona como un encanto.

Simplemente recuerde ajustar los argumentos para mostrar solo 5 publicaciones, en lugar de todas.

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

Add 'showposts' => 5 a su gama actual de argumentos en el bucle que itera a través de los puestos de cada categoría.

Cuestiones relacionadas