Ordinare i risultati per nome in ordine crescente su Archive.php
Attualmente utilizzo il seguente codice per elencare i post in Archive.php ma voglio che i risultati siano ordinati per nome in ordine crescente. Ho controllato il codex ma la risposta non mi è chiara, come posso farlo funzionare?
<?php $post = $posts[0]; // ?>
Grazie in anticipo.

Il modo più semplice per farlo è utilizzare un hook (l'hook pre_get_posts
) per modificare l'ordinamento. Ma dovresti verificare che la query sia quella per cui vuoi effettivamente alterare l'ordine! (is_archive()
o is_post_type_archive()
dovrebbero essere sufficienti.)
Ad esempio, inserisci il seguente codice nel file functions.php del tuo tema...
add_action( 'pre_get_posts', 'my_change_sort_order');
function my_change_sort_order($query){
if(is_archive()):
//Se vuoi applicarlo all'archivio di un custom post type usa: is_post_type_archive( $post_type )
//Imposta l'ordine ASC o DESC
$query->set( 'order', 'ASC' );
//Imposta il campo per l'ordinamento
$query->set( 'orderby', 'title' );
endif;
};

Ciao, potresti mostrare come funziona l'ordinamento predefinito? Se possibile, qualche link. Grazie.

@LatheeshVMVilla WP è sviluppato come un blog, quindi l'ordinamento logico/predefinito è per post_date DESC (=decrescente), quindi i post più recenti per primi. Se stai usando WP per qualcosa dove il tempo è meno rilevante (la maggior parte dei tipi di liste, come la tua collezione di dischi, ricette, un glossario, ...) spesso vorrai ordinare per post_title ASC (=Ascendente, quindi alfabetico per titolo con i numeri che precedono le lettere).

<?php
// Aggiungiamo questo codice per mostrare tutti i post
// del Glossario in ordine alfabetico
if ( is_category('Glossary') ) {
$args = array(
'posts_per_page' => -1, // Mostra tutti i post
'orderby' => 'title', // Ordina per titolo
'order' => 'ASC' // Ordine ascendente (A-Z)
);
$glossaryposts = get_posts( $args );
}
foreach( $glossaryposts as $post ) : setup_postdata( $post );
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>

Puoi spiegare perché questo aiuta l'OP? Per favore, aggiungi sempre una spiegazione sopra un frammento di codice. Grazie.

Direttamente dal riferimento al codice di WordPress - "Questa funzione sovrascriverà completamente la query principale e non è destinata all'uso da parte di plugin o temi. Il suo approccio eccessivamente semplificato alla modifica della query principale può essere problematico e dovrebbe essere evitato quando possibile. Nella maggior parte dei casi, esistono opzioni migliori e più performanti per modificare la query principale, come tramite l'azione 'pre_get_posts' all'interno di WP_Query."
In sintesi, @Stephen Harris ha il modo corretto per ottenere questo risultato.
https://developer.wordpress.org/reference/functions/query_posts/
