WordPress cambia el orden de las publicaciones a través del bucle estándar

2 minutos de lectura

¿Es posible ordenar publicaciones manteniendo intacto el bucle estándar de WordPress (es decir, sin tener que crear un WP_Query completamente nuevo?

Por bucle estándar quiero decir:

<?php if ( have_posts() ) : ?>


            <?php /* The loop */ ?>
            <?php while ( have_posts() ) : the_post(); ?>

¿Puedo especificar el orden dentro de este código?

Como documentado a query_posts pagina de funciones:

Está fuertemente recomienda que utilice el pre_get_posts filtre en su lugar, y modifique la consulta principal marcando is_main_query.

Puede agregar una nueva acción en pre_get_posts en tu tema functions.php archivo, como:

function homepage_posts($query)
{
    if ($query->is_home() && $query->is_main_query())
    {
        $query->set( 'orderby', 'title' );
    }
}
add_action('pre_get_posts', 'homepage_posts');

  • Gracias, intenté agregar lo siguiente a mi archivo functions.php pero no tuvo ningún efecto. Estoy tratando de hacer que el orden de un tipo de publicación personalizado sea aleatorio en la página category.php: function cat_posts($query) { if ($query->is_category() && $query->is_main_query()) { $query->set( 'orderby', 'rand' ); } } add_action('pre_get_posts', 'cat_posts');

    – Kev

    27/10/2013 a las 19:07

  • @Kev deberías cambiar tu if condición para if($query->is_category)

    – revo

    27/10/2013 a las 19:11


avatar de usuario
kevin regenrek

wp_reset_query() es el camino a seguir

Fragmento de ejemplo

<?php query_posts(array('orderby'=>'title','order'=>'DESC'));

if ( have_posts() ) :
    while ( have_posts() ) : the_post(); ?>
        <a href="<?php the_permalink() ?>"><?php the_title() ?></a><br /><?php
    endwhile;
endif;
wp_reset_query();

Pero tenga en cuenta: query_posts() cambiará su consulta principal y no se recomienda. Úselo solo si es absolutamente necesario (consulte query_posts: Advertencias). Se prefiere crear una nueva instancia de WP_Query o get_posts() para bucles secundarios.

  • Gracias, lo probé pero obtuve el siguiente error: syntax error, unexpected T_DOUBLE_ARROW

    – Kev

    27/10/2013 a las 19:08


¿Ha sido útil esta solución?