El bucle (V) personalizando el bucle (III) get_posts()
Existe otra función llamada get_posts() que también puede recuperar datos de las entradas. Esta función se suele utilizar en páginas de administración o en algún plugin para obtener datos sin procesar de entradas sin examinar patrones de ningún tipo. No debe usarse para la presentación de contenido al usuario ya que desactiva muchas de las características de filtrado de WP_Query.
Carece de la capacidad para establecer todos los datos globales necesarios para que las etiquetas de plantilla reflejen los datos de las entradas actuales, de hecho no todas las etiquetas de plantilla están disponibles para esta función.
Para corregir esta diferencia se debe de utilizar la función setup_postdata() con el fin de completar las etiquetas de plantilla al usar el bucle.
<?php $randompost = get_posts('numberposts=2&orderby=rand'); foreach ($randompost as $post) { setup_postdata($post); ?> <h4><a href="<?php the_permalink() ?>"><?php the_title() ?></a></h4> <p><?php the_excerpt(); ?></p> <?php } ?>
Como se puede observar, en el ejemplo, cuando hacemos nuestra consulta con get_posts() los resultados se guardan en una matriz, por ello luego debemos recorrer el resultado con un bucle foreach, en lugar del while al que estamos acostumbrados. Una vez estamos en el elemento de la matriz debemos de invocar a setup_postdata() introduciéndole como argumento la entrada en la que nos encontramos y de esa forma ya tener acceso a las etiquetas de plantilla.
También es posible configurar los parámetros de get_posts() por medio de un array:
$args = array( 'numberposts'=> 2, 'orderby' => rand ); $randompost = get_posts($args);
Como hemos podido ver en las últimas entradas hay varias formas de hacer bucles personalizados, pero la ideal siempre será WP_Query. Pero puede ocurrir que en ocasiones necesitemos accesos rápidos como los que proporciona get_posts(), por lo que útil conocer las tres formas.
En la próxima entrada veremos como restablecer las consultas, para que futuros bucles no nos den errores.
There is One Comment.