Ordenar resultados por nombre y orden asc en Archive.php

15

Actualmente utilizo el siguiente código para enumerar las publicaciones en Archive.php pero quiero que los resultados se ordenen por nombre en orden ascendente, he verificado el códice pero la respuesta no está clara para mí, ¿cómo puedo hacer que esto funcione?

<?php $post = $posts[0]; // ?>

Gracias por adelantado.

Dave Burns
fuente
si está utilizando una consulta personalizada en su archivo.php, ¿puede mostrarla? puede publicar el archivo.php completo en pastie.org y actualizar su respuesta con el enlace?
Hameedullah Khan

Respuestas:

36

La forma más fácil de hacer esto es usar un gancho (el pre_get_postsgancho) para cambiar el orden. ¡Pero debe verificar que la consulta es una para la que desea modificar el orden! ( is_archive()o is_post_type_archive()debería ser suficiente)

Por ejemplo, pon lo siguiente en las funciones de tu tema.php ...

add_action( 'pre_get_posts', 'my_change_sort_order'); 
    function my_change_sort_order($query){
        if(is_archive()):
         //If you wanted it for the archive of a custom post type use: is_post_type_archive( $post_type )
           //Set the order ASC or DESC
           $query->set( 'order', 'ASC' );
           //Set the orderby
           $query->set( 'orderby', 'title' );
        endif;    
    };
Stephen Harris
fuente
Hola, ¿podrás mostrar cómo funciona el pedido predeterminado? Algunos enlaces si es posible
Gracias
@LatheeshVMVilla WP se desarrolla como un blog, por lo que el pedido sensible / predeterminado es post_date DESC (= descendente), por lo que es el más nuevo-primero-primero. Si está utilizando WP para algo donde el tiempo es menos relevante (la mayoría de los tipos de listas, como su colección de registros, recetas, un glosario, ...), querrá ordenar a menudo ASC post_title (= Ascendente, por lo que es alfabético por título con números que preceden letras).
user3445853
Gracias. Funciona bien para mi página de archivo de taxonomía.
Sema Hernández
1
<?php
// we add this, to show all posts in our
// Glossary sorted alphabetically
if ( is_category('Glossary') )  {
    $args = array( 
        'posts_per_page' => -1, 
        'orderby'        => 'title', 
        'order'          => 'ASC' 
    );
    $glossaryposts = get_posts( $args );
}
foreach( $glossaryposts as $post ) : setup_postdata( $post );
    ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
Abdelfattah Saied Baraka
fuente
1
¿Puede explicar por qué esto ayuda al OP? Por favor, siempre agregue una explicación en la parte superior de un fragmento de código. Gracias.
kaiser
La pregunta era Ordenar resultados por nombre y orden de asc en Archive.php. Presumiblemente de acuerdo con el respondedor, este código ordenará los resultados por nombre y orden asc en Archive.php?
Jon
0

Además de la respuesta de Stephen, si solo desea consultar y ordenar por título, puede usar esto en su archivo de plantilla:

$args = ( array(
'order' => 'ASC',
'orderby' => 'title',
 ) );

query_posts($args);
josh
fuente
55
Directamente desde la referencia del código de WordPress: "Esta función anulará por completo la consulta principal y no está destinada a ser utilizada por complementos o temas. Su enfoque demasiado simplista para modificar la consulta principal puede ser problemático y debe evitarse siempre que sea posible. En la mayoría casos, hay opciones mejores y más eficaces para modificar la consulta principal, como a través de la acción 'pre_get_posts' dentro de WP_Query ". En pocas palabras, @Stephen Harris tiene la forma correcta de lograr esto. developer.wordpress.org/reference/functions/query_posts
Michael