Ordenar los post o entradas de forma ascendente en WordPress



Cuando publicamos un post en nuestro sitio con WordPress, este muestra en la Home o página de Blog los últimos post ordenados de los más nuevos a los más antigüos. Esta orden la hace por defecto debido a que es muy cómodo para los usuario de una web ver los últimos post publicados si los muestra primero ordenados por fecha.

Como casi todo es personalizable en WordPress, esto también lo podemos cambiar. En este post vamos a ver el código necesario para cambiarlo y ordenar los post de forma ascendente de manera que se muestren primero los post o entradas con más antigüedad. Además de la página principal o de Blog, esto también será efectivo si accedemos a los post de una determinada categoría.

El código necesario para modificar esta opción es el siguiente y debemos añadirlo al archivo functions.php del theme que estemos utilizando:

function prefix_modify_query_order( $query ) {
  if ( is_main_query() ) {

    $args =  array( 'post_date' => 'ASC' );

    $query->set( 'orderby', $args );
  }
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );

 

 

En el código anterior establecemos que los parámetros de ordenación serán que los post se ordenen por la fecha de forma ascendente. Además de esta configuración, también tenemos la posibilidad de añadir varios parámetros simultáneos como por ejemplo que se ordenen por la fecha y también teniendo en cuenta el título. En este otro ejemplo vemos como:

function prefix_modify_query_order( $query ) {
  if ( is_main_query() ) {

    $args =  array( 'post_date' => 'DESC', 'title' => 'ASC' );

    $query->set( 'orderby', $args );
  }
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );

Volvemos a mencionar que con estos ejemplos estaremos aplicando la configuración a toda la web por lo que si sólo nos interesa cambiar los parámetros a la página principal o de los post de una categoría no nos serviría este código.

 

Nota

En algunos themes puede darnos el siguiente error:

Notice: is_main_query se llamó incorrectamente. En pre_get_posts, usa el método WP_Query->is_main_query(), no la función is_main_query()

Si se da este caso, utilizar este código en lugar del anterior:

function prefix_modify_query_order( $query ) {
  if ( $query->is_main_query() ) {

    $args =  array( 'post_date' => 'ASC' );

    $query->set( 'orderby', $args );
  }
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );