Programación
está resueltoLe 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,
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
mil gracias, ya lo pruebo aver que pasa, gracias LGrusin como siempre.
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
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
Debes Identificarte para publicar.