Ordenar wp_query por título

7 oct 2011, 20:51:46
Vistas: 23K
Votos: 3

Tengo títulos de posts que comienzan con un precio, por ejemplo: $199,900 - 123 Street. Estoy usando el código siguiente, y no puedo hacer que el ordenamiento por título en forma ascendente funcione correctamente. ¿Alguna sugerencia por favor?

<?php
$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">Ver Detalles</a>
 <br />
                <?php
                }
                ?>

        </div>

    <?php endwhile; wp_reset_postdata();?>

<?php else : ?>

    <h2 class="center">No Encontrado</h2>
    <p class="center">Lo sentimos, pero estás buscando algo que no está aquí.</p>
    <?php get_search_form(); ?>

<?php endif; ?>

</div>
0
Todas las respuestas a la pregunta 1
2

Si estás intentando que se ordenen por precio ascendente, el problema es que ordenar por título es una comparación de cadenas, no numérica. Una solución sería poner el precio en un campo personalizado y ordenar por tu campo personalizado en lugar del título. Deberías añadir un parámetro meta_key con el nombre de tu metaclave, y ordenar por meta_value_num. Consulta WP_Query en el Codex para más información.

Además, si quieres que se devuelvan todas las publicaciones (lo que supongo que estás intentando hacer al establecer un número tan alto), puedes configurar posts_per_page a -1 y esto eliminará la cláusula LIMIT de la consulta.

7 oct 2011 22:29:41
Comentarios

¡Muchas gracias Milo! ¡Funciona perfectamente! Había visto el uso de meta_key y meta_value mientras buscaba una respuesta, pero nunca lo entendí completamente ni su conexión con los campos personalizados.

spiderling spiderling
7 oct 2011 23:26:55

En 2023 hacemos 'orderby' => 'title_num',

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