Visualizzare i post in ordine alfabetico nel loop
Con questo loop sto visualizzando singoli post in una pagina di archivio. I post vengono filtrati per la categoria 'Banks'. Come posso visualizzarli in ordine alfabetico? Ho provato a usare WP_Query
, ma non riesco a farlo funzionare; ogni volta rompe il mio loop.
<h3>Banche e Istituti di Credito</h3>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();
if ( in_category( 'Banks' ) ) { ?>
<li>
<a href="<?php the_permalink() ?>">
<img src="<?php the_field( 'biller_logo' )?>">
<?php the_field( 'biller_name' ) ?>
</a>
</li>
<?php }
endwhile; endif; ?>
</ul>
Per visualizzare i post in ordine alfabetico discendente aggiungi questo al tuo array args
(preso dal wp codex)
'orderby' => 'title',
'order' => 'DESC',
Per visualizzare i post in ordine alfabetico ascendente basta cambiare DESC
in ASC
.
Quindi l'intero codice sarebbe:
$args = array(
'orderby' => 'title',
'order' => 'DESC',
);
$query = new WP_Query( $args );
Parametri di Ordinamento WP_Query
Oppure, se non vuoi modificare il loop principale, puoi usare get_posts
. WP query altera il loop principale modificando le variabili della variabile globale $wp_query. get_posts, d'altro canto, semplicemente fa riferimento a un nuovo oggetto WP_Query, e quindi non influisce né altera il loop principale. Si userebbe nello stesso modo, ma cambiando $query = new WP_Query( $args );
in qualcosa come $query = get_posts( $args );
.
Se desideri modificare la query principale prima che venga eseguita, puoi agganciarti ad essa usando la funzione pre_get_posts.

non è chiaro dalla domanda se si tratta di una query aggiuntiva - pre_get_posts
sarebbe più appropriato nel caso di una query principale, anche se i parametri da impostare sarebbero gli stessi.

Non è il codice migliore che abbia mai scritto qui, ma se vuoi creare una lista come:
- A
- America
- B
- Brasile
- Bahamas
Potresti usare..
<ul>
<?php
query_posts(array(
'post_type' => 'franchise',
'showposts' => 100,
'orderby'=>'title','order'=>'ASC'
) );
$title_2 = 'A';
?>
<?php while (have_posts()) : the_post(); ?>
<?php
$title = get_the_title();
$title_1 = $title[0];
if ($title_1 !== $title_2){
echo '<li> </li><li><h3>' . $title_1 . '</h3></li><li> </li>';
$title_2 = $title_1;
}
?>
<li><a href="<?php echo get_the_permalink(); ?>"><?php echo get_the_title(); ?></a></li>
<?php endwhile;?>
</ul>
Come ho detto - non è la migliore pratica.. ma puoi sistemare e lavorare da qui :)

query_posts
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 il più 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
. Non deve essere utilizzata all'interno del Loop di WordPress.

nota che se vuoi modificare/cambiare una query, devi farlo tramite il filtro pre_get_posts
, altrimenti query_posts
raddoppia il numero di query e interrompe la paginazione senza soluzioni alternative. Se insisti nell'usarlo, devi ripulire dopo utilizzando wp_reset_query()
dopo il loop, altrimenti tutto ciò che viene dopo il loop utilizzerà il post sbagliato
