Сортировка wp_query по заголовку

7 окт. 2011 г., 20:51:46
Просмотры: 23K
Голосов: 3

У меня есть заголовки записей, которые начинаются с цены, например: $199,900 - 123 Street. Я использую код ниже, но сортировка по заголовку в порядке возрастания не работает должным образом. Пожалуйста, подскажите решение.

<?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">Посмотреть детали</a>
 <br />
                <?php
                }
                ?>

        </div>

    <?php endwhile; wp_reset_postdata();?>

<?php else : ?>

    <h2 class="center">Не найдено</h2>
    <p class="center">Извините, но то, что вы ищете, здесь отсутствует.</p>
    <?php get_search_form(); ?>

<?php endif; ?>

</div>
0
Все ответы на вопрос 1
2

Если вы пытаетесь отсортировать записи по возрастанию цены, проблема в том, что сортировка по заголовку — это строковое сравнение, а не числовое. Решение — поместить цену в произвольное поле и сортировать по нему, а не по заголовку. Вам нужно добавить параметр meta_key с именем вашего мета-ключа и указать meta_value_num для сортировки. Подробнее см. в WP_Query в Codex.

Также, если вы хотите получить все записи (предполагаю, что именно это вы пытаетесь сделать, указывая такое большое число), вы можете установить posts_per_page в значение -1, и это уберёт условие LIMIT из запроса.

7 окт. 2011 г. 22:29:41
Комментарии

Огромное спасибо, Мило! Работает прекрасно! Я видел использование meta_key и meta_value, когда искал ответ, но так до конца и не понял их полностью и их связь с произвольными полями.

spiderling spiderling
7 окт. 2011 г. 23:26:55

В 2023 году мы используем 'orderby' => 'title_num',

Tim Hallman Tim Hallman
9 февр. 2023 г. 01:35:13