Ordonare wp_query după titlu

7 oct. 2011, 20:51:46
Vizualizări: 23K
Voturi: 3

Am titluri de postări care încep cu un preț, de exemplu: $199,900 - 123 Strada. Folosesc codul de mai jos și nu reușesc să fac să funcționeze corect ordonarea ascendentă după titlu. Aveți vreo sugestie vă rog?

<?php
// Obține pagina curentă sau setează 1 dacă nu există
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
 'cat' =>21,
 'posts_per_page' => 999999,
 'paged' => $paged,
 'orderby' => 'title',
 'order' => 'ASC',
 );
$the_query = new WP_Query($args);
?>
<div id="listings">

<?php if ($the_query->have_posts()) : ?>

<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
        <div <?php post_class() ?> id="post-<?php the_ID(); ?>">
            <div class="title1 active_listing">
                <?php
                if (in_category('6')) {
                the_title();
                } else {
                ?>

                <a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
                <?php
                }
                ?>
            </div>

                <div class="alignleft thumb"><?php the_post_thumbnail('thumbnail'); ?>
<br />
</div>
        <div class="content"><?php the_excerpt(); ?> </div>

                <?php
                if (in_category('6')) {
                ?>
<br />
                <?php
                } else {
                ?>
 <a href="<?php the_permalink() ?>" rel="bookmark">Vezi Detalii</a>
 <br />
                <?php
                }
                ?>

        </div>

    <?php endwhile; wp_reset_postdata();?>

<?php else : ?>

    <h2 class="center">Nu a fost găsit</h2>
    <p class="center">Ne pare rău, dar ceea ce cauți nu se află aici.</p>
    <?php get_search_form(); ?>

<?php endif; ?>

</div>
0
Toate răspunsurile la întrebare 1
2

Dacă încerci să obții ordonarea după preț crescător, problema este că ordonarea după titlu este o comparație de șiruri de caractere, nu numerică. O soluție ar fi să pui prețul într-un câmp personalizat și să utilizezi orderby pe acel câmp în loc de titlu. Ai putea adăuga un parametru meta_key cu numele cheii meta și să utilizezi meta_value_num pentru ordonare. Consultă WP_Query în Codex pentru mai multe informații.

De asemenea, dacă vrei să returnezi toate articolele (ceea ce presupun că încerci să faci prin setarea unui număr atât de mare), poți seta posts_per_page la -1 și asta va elimina clauza LIMIT din interogare.

7 oct. 2011 22:29:41
Comentarii

Mulțumesc mult, Milo! Funcționează minunat! Am văzut utilizarea meta_key și meta_value în timp ce căutam un răspuns, dar nu le-am înțeles niciodată complet și conexiunea lor cu câmpurile personalizate.

spiderling spiderling
7 oct. 2011 23:26:55

În 2023 folosim 'orderby' => 'title_num',

Tim Hallman Tim Hallman
9 feb. 2023 01:35:13