Programación

Foro WordPress » WordPress » Programación

Ultimo post de varias categorias en una sola consulta (5 mensajes)

Acerca de este hilo

Tags

  1. marcejavier

    3.0
    Antiguedad: Feb 2011
    Mensajes: 10

    offline

    Publicado hace 1 año
    #

    Le comento, un sidebar llama un post de cada categoria,y son 11 categorias, por el cual uso el siguiente loop por cada categoria:

    < ?php query_posts('showposts=1&cat=13'); ? >
    < ?php while (have_posts()) : the_post(); ? >
    < ?php endwhile; wp_reset_query(); ? >

    Obviamente esto me esta generando bastantes consultas sql cada vez que quiero recuperar un post de cada categoria designada

    Ahora, como puedo hacer un solo loop que me recupere el ultimo post de cada categoria que yo designe?

    Probe con esto, pero no funciona, solo obtengo post de la primera categoria que esta como argumento, osea la 13:

    < ?php
    $args = array(
    'caller_get_posts' = > 1,
    'category__in' = > array(13,16,6,33,34,27,8,10,15,11,9),

    );

    query_posts($args);? >
    < ?php while (have_posts()) : the_post(); ? >

    Lei por ahi que utilizar WP_query () es mucho mejor para las consultas, entonces intento probar con esto:

    $query = new WP_Query( array( 'category__and' => array( 13,16,6,33,34,27,8,10,15,11,9 ) ) );

    pero con esto, como hago para obtener solo el ultimo post de cada categoria pasada como parametro, en cual debo recuperar el titulo del post, el permalink y el titulo de la categoria de cada id del array?

    Si yo los molesto con esto es porque he intentado encontrar la solucion, pero no puedo dar con ella.

    Obviamente, que con esto, yo ahorraria algo asi como 30 consultas resumiendo en un solo loop como el que necesito para optimizar las consultas, muchas gracias a todos,

  2. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 1 año
    #

    Vaya no había visto el hilo.

    En el Foro de WordPress.org encontré este código que no he podido probar.

    <?php // mostrar 1 post por cada categoria
    $categories=get_categories('orderby=name&order=ASC');
     foreach($categories as $category) {
     $posts=get_posts('showposts=1&cat='. $category->term_id);
     if ($posts) {
     echo '<p>Categoria: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Ver todos los posts en %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
      } // fin foreach posts
     } // fin if
    } // fin foreach categories
    ?>

    Utiliza dos foreach uno dentro de otro. El primero para mostrar la categoría y el segundo para mostrar el post de cada categoría. Creo que te puede servir perfectamente y en caso contrario sólo hacer alguna modificación. Lo miraré con más calma.

    Un saludo

  3. marcejavier

    3.0
    Antiguedad: Feb 2011
    Mensajes: 10

    offline

    Publicado hace 1 año
    #

    mil gracias, ya lo pruebo aver que pasa, gracias LGrusin como siempre.

  4. marcejavier

    3.0
    Antiguedad: Feb 2011
    Mensajes: 10

    offline

    Publicado hace 1 año
    #

    Bueno, hice esto tomando como base lo pasado enteriormente, y lo que logro con esto es que solo recupero el ultimo post solo de la categoria 13.... no veo como dar con el error, ya que sobre php se hasta ahi....gracias

    < ?php // mostrar 1 post por cada categoria
    $categories=get_categories('include=13,16,6,33,34,27,8,10,15,11,9');
     foreach($categories as $category) {
     $posts=get_posts('showposts=1&amp;cat='. $category- >term_id);
     if ($posts) {
     echo '< p >Categoria: <a>term_id ) . '" title="' . sprintf( __( "Ver todos los posts en %s" ), $category- >name ) . '" ' . ' >' . $category- >name.'</a> < /p > ';
    foreach ($posts as $post) :  setup_postdata($post); ? >

       < !--start modulo-- >
    < div class="
    box border_b back_b_a" >
      < div class="
    back_title back_color_b" >
        < div class="
    title" >< ?php $category- >name ? >< /div >
      < /div >
        < div class="
    photo" >

       < ?php the_post_thumbnail('medium'); ? >
      < /div >
      < h4 >
        < ?php the_time('l, F jS, Y') ? >
      < /h4 >
      < h5 ><a>"
    rel="bookmark" title="< ?php printf(__('Permanent Link to %s', 'kubrick'), the_title_attribute('echo=0')); ? >" >
        < ?php the_title(); ? >
        </a>< /h5 >
    < /div >
    < !--end modulo-- >
      < ?php
       endforeach;  // fin foreach posts
     }  // fin if
    } // fin foreach categories
    ? >

  5. LGrusin

    Moderador
    Antiguedad: Feb 2011
    Mensajes: 1.801

    offline

    Publicado hace 1 año
    #

    A ver, ¿Son muchas las categorías? Si muestras la mayoría de categorías quizás sea más fácil decirle las que excluyes. Por ejemplo, suponiendo que no quieras la 15, 23 y 34. Sería asi:

    <?php // mostrar 1 post por cada categoria
    $categories=get_categories('orderby=name&order=ASC&exclude=15, 23, 34');
     foreach($categories as $category) {
     $posts=get_posts('showposts=1&cat='. $category->term_id);
     if ($posts) {
     echo '<p>Categoria: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Ver todos los posts en %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>
       <?php the_excerpt(); ?></p>
      <?php
      } // fin foreach posts
     } // fin if
    } // fin foreach categories
    ?>

    Sólo hay que cambiar la línea

    $categories=get_categories('orderby=name&order=ASC');

    por

    $categories=get_categories('orderby=name&order=ASC&exclude=15, 23, 34');

    Esta línea lo que hace es ordenarlas por nombre de la A a la Z y deja fuera las categorías 15, 23 y 34

    Ten en cuenta también que aquí no hay estilos, los tendrás que poner si quieres alguna presentación especial. Eso lo hacemos al final cunado esté funcionado bien el código.

    Un saludo

Responder

Debes Identificarte para publicar.

Foro WordPress » WordPress » Programación