Ordenar resultados por nombre y orden ascendente en Archive.php
Actualmente uso el siguiente código para listar entradas en Archive.php pero quiero que los resultados estén ordenados por nombre en orden ascendente. He revisado el codex pero la respuesta no me queda clara, ¿cómo puedo hacer que esto funcione?
<?php $post = $posts[0]; // Asignación inicial del post ?>
Gracias de antemano.
The WP_Query parameters you need to add are: - orderby=title - order=ASC You can use:<?php
$args = array(
'orderby' => 'title',
'order' => 'ASC'
);
$query = new WP_Query($args);
?>
O modificar la consulta existente agregando estos parámetros a los argumentos actuales.
La forma más fácil de hacer esto es usar un hook (el hook pre_get_posts
) para cambiar el orden. ¡Pero debes verificar que la consulta sea una para la que deseas alterar el orden! (is_archive()
o is_post_type_archive()
deberían ser suficientes).
Por ejemplo, coloca lo siguiente en el functions.php de tu tema...
add_action( 'pre_get_posts', 'my_change_sort_order');
function my_change_sort_order($query){
if(is_archive()):
//Si lo deseas para el archivo de un tipo de entrada personalizado usa: is_post_type_archive( $post_type )
//Establece el orden ASC o DESC
$query->set( 'order', 'ASC' );
//Establece el orderby
$query->set( 'orderby', 'title' );
endif;
};

Hola, ¿podrías mostrar cómo funciona el orden predeterminado? Algunos enlaces si es posible. Gracias.

@LatheeshVMVilla WordPress fue desarrollado como un blog, por lo que el orden predeterminado/lógico es por post_date DESC (descendente), mostrando primero las publicaciones más recientes. Si usas WP para algo donde el tiempo es menos relevante (la mayoría de tipos de listas, como tu colección de discos, recetas, un glosario,...) normalmente querrás ordenar por post_title ASC (ascendente, es decir, alfabéticamente por título con los números antes que las letras).

<?php
// Añadimos esto para mostrar todos los posts en nuestro
// Glosario ordenados alfabéticamente
if ( is_category('Glosario') ) {
$args = array(
'posts_per_page' => -1, // Mostrar todos los posts
'orderby' => 'title', // Ordenar por título
'order' => 'ASC' // Orden ascendente
);
$glossaryposts = get_posts( $args );
}
foreach( $glossaryposts as $post ) : setup_postdata( $post );
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>

¿Puedes explicar por qué esto ayuda al OP? Por favor, siempre agrega una explicación antes de un fragmento de código. Gracias.

Directamente de la referencia de código de WordPress - "Esta función anulará completamente la consulta principal y no está destinada para su uso por plugins o temas. Su enfoque excesivamente simplista para modificar la consulta principal puede ser problemático y debe evitarse siempre que sea posible. En la mayoría de los casos, existen opciones mejores y más eficientes para modificar la consulta principal, como a través de la acción 'pre_get_posts' dentro de WP_Query."
En resumen, @Stephen Harris tiene la forma correcta de lograr esto.
https://developer.wordpress.org/reference/functions/query_posts/
