Wordpress query_posts() orderby => «заголовок» не работает

У меня проблема с упорядочением некоторых сообщений в списке навигации на сайте WordPress. вот мой код (с плохим отступом):

<ul class="tree lvl-0">
        <?php
            $args = array('child_of' => 6);
            $categories = get_categories( $args );
            foreach($categories as $category) {
                echo '<li class="collapsed"><a href="' . get_category_link( $category->term_id ) . '"' . $category->name  . '" ' . '>' . $category->name.'</a>';
                $cat_id= $category->term_id;
                wp_reset_query();
                $args = array(
                    'cat' => $cat_id,
                    'posts_per_page' => 20,
                    'order' => 'ASC',
                    'orderby' => 'title'
                );
                query_posts($args);
                            // start the wordpress loop!
                        ?>
                            <ul class="lvl-1">
                                <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                        <li><a href="<?php the_permalink();?>"><?php the_title(); ?></a></li>
                                <?php endwhile; endif; ?>
                            </ul>
                        </li>
            <?php wp_reset_query(); } ?>
    </ul>

рассматриваемая часть является

$args = array(
    'cat' => $cat_id,
    'posts_per_page' => 20,
    'order' => 'ASC',
    'orderby' => 'title'
);
query_posts($args);

Я не слишком уверен, в каком порядке они находятся, это может быть дата. Кроме того, когда я заказываю по имени или как-то еще, это работает. :(

Спасибо за любую помощь заранее


person Bill    schedule 30.01.2013    source источник
comment
Я видел нечто подобное, когда клиент начал использовать плагин qTranslate. Сообщения, созданные до плагина, сортировались не так, как те, что были созданы позже. Дело сводилось к тому, как они хранились в базе данных - pre-qTranslate как 'Title', пост как '‹!--:de--›Title‹!--:--›‹!--:fr--› Титр'. MySQL просто отсортировал их по порядку символов. Это многословный способ сказать — посмотрите в базе данных, особенно в поле post_title в таблице wp_posts. Могут быть какие-то лишние/скрытые символы, которые все портят. Особенно, если это работает для других областей.   -  person Hobo    schedule 30.01.2013
comment
Это может помочь вам wordpress.stackexchange. ком/вопросы/54347/   -  person Rikesh    schedule 30.01.2013
comment
Бродяга, не могли бы вы опубликовать это как ответ и плохо принять его. Чеорс   -  person Bill    schedule 31.01.2013


Ответы (2)


См. комментарий Бродяги к вопросу ^

Мой клиент также использует qTranslate, и это было точной причиной проблемы.

person Bill    schedule 30.01.2013

Проблема в $args, сделайте так:

$args = array(
    'cat' => $cat_id,
    'posts_per_page' => 20,
    'orderby' => array( 'title' => 'ASC' )
);

Вы также можете заказать по нескольким параметрам, например:

$args = array(
    'cat' => $cat_id,
    'posts_per_page' => 20,
    'orderby' => array( 'menu_order' => 'ASC', 'title' => 'ASC', 'post_date' => 'DESC' ),
);
person zod    schedule 11.05.2020