Afișarea articolelor în ordine alfabetică într-o buclă
Cu această buclă afișez articole individuale pe o pagină de arhivă. Articolele sunt sortate după categoria 'Banks'. Suplimentar, cum pot să le afișez în ordine alfabetică? Am încercat să folosesc WP_Query
, dar nu reușesc să îl fac să funcționeze; îmi strică bucla de fiecare dată.
<h3>Bănci și Uniuni de Credit</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>
Pentru a afișa postările în ordine alfabetică descrescătoare, adăugați acest cod în array-ul args
(preluat din wp codex)
'orderby' => 'title',
'order' => 'DESC',
Pentru a afișa postările în ordine alfabetică crescătoare, înlocuiți DESC
cu ASC
.
Codul complet ar arăta astfel:
$args = array(
'orderby' => 'title',
'order' => 'DESC',
);
$query = new WP_Query( $args );
Parametrii WP_Query pentru Sortare
Alternativ, dacă nu doriți să modificați bucla principală, puteți utiliza get_posts
. WP_Query modifică bucla principală prin schimbarea variabilelor globale $wp_query. Pe de altă parte, get_posts creează pur și simplu un nou obiect WP_Query, fără a afecta bucla principală. Se folosește în același mod, dar schimbând $query = new WP_Query( $args );
în ceva de genul $query = get_posts( $args );
.
Dacă doriți să modificați interogarea principală înainte ca aceasta să fie executată, puteți folosi funcția pre_get_posts.

nu este clar din întrebare dacă aceasta este o interogare suplimentară - pre_get_posts
ar fi mai potrivit în cazul unei interogări principale, deși parametrii pe care i-ați seta ar fi aceiași.

Nu este cel mai bun cod pe care l-am scris vreodată, dar dacă doriți să creați o listă precum:
- A
- America
- B
- Brazil
- Bahamas
Ați putea folosi..
<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>
Cum am spus - nu cea mai bună practică.. dar puteți să o îmbunătățiți și să lucrați de aici :)

query_posts
Această funcție va suprascrie complet interogarea principală și nu este destinată utilizării de către plugin-uri sau teme. Abordarea ei excesiv de simplistă de modificare a interogării principale poate fi problematică și ar trebui evitată oriunde este posibil. În majoritatea cazurilor, există opțiuni mai bune și mai performante pentru modificarea interogării principale, cum ar fi prin acțiunea pre_get_posts
în cadrul WP_Query
. Acest lucru nu trebuie utilizat în cadrul WordPress Loop.

rețineți că dacă doriți să modificați/schimbați o interogare, atunci trebuie să faceți acest lucru prin filtrul pre_get_posts
, altfel query_posts
dublează numărul de interogări și strică paginarea fără soluții ocolitoare. Dacă insistați totuși să o utilizați, trebuie să curățați după aceasta folosind wp_reset_query()
după buclă, altfel totul după buclă va folosi postarea greșită
