Afișarea articolelor în ordine alfabetică într-o buclă

4 dec. 2015, 21:33:32
Vizualizări: 47.1K
Voturi: 8

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>
1
Comentarii

ce pagină de arhivă? este aceasta interogarea principală sau una secundară?

Milo Milo
4 dec. 2015 22:16:29
Toate răspunsurile la întrebare 2
2
17

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.

4 dec. 2015 22:33:08
Comentarii

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.

Milo Milo
5 dec. 2015 00:23:42

într-adevăr, dar doar get_posts ar fi mai simplu. Am actualizat răspunsul meu cu get_posts adăugat.

thebigtine thebigtine
5 dec. 2015 01:09:05
2

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>&nbsp;</li><li><h3>' . $title_1 . '</h3></li><li>&nbsp;</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 :)

2 apr. 2018 18:09:56
Comentarii

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.

Amit P Amit P
18 oct. 2024 10:27:22

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ă

Tom J Nowell Tom J Nowell
24 oct. 2024 18:56:36