query_posts не сортирует по заголовку

6 июн. 2012 г., 12:42:45
Просмотры: 50K
Голосов: 4

Похоже на глупую ошибку, но как мне отсортировать по заголовку? Все равно сортирует по дате! Я использую:

query_posts( array( 
    'post_type'      => 'page',
    'posts_per_page' => -1,
    'orderby'        => 'title',
    'order'          => 'ASC'
) );

Я хочу использовать это в функции как SHORTCODE. То, чего я пытаюсь достичь - это создать карту сайта / индекс всех записей в алфавитном порядке. Также я использую новейшую версию WP.

7
Комментарии

Можем ли мы увидеть результат var_dump() или print_r() сгенерированного запроса? Также было бы полезно получить немного контекста для этого кода. Вы модифицируете основной запрос цикла или запускаете дополнительный цикл?

Chip Bennett Chip Bennett
6 июн. 2012 г. 18:26:07

Я создал функцию, которая работает как шорткод, она отображает все записи наподобие индекса, например, показывает букву, а после буквы все записи, которые начинаются с этой буквы, как карта сайта. Я размещу массив в вопросе.

Tommixoft Tommixoft
6 июн. 2012 г. 19:36:10

Массив выглядел ОГРОМНЫМ и был отсортирован по дате, поэтому я решил не публиковать его здесь. Я не новичок в PHP или WordPress, поэтому не думаю, что упускаю что-то в коде. Я опубликовал упрощенную версию моей функции.

Tommixoft Tommixoft
6 июн. 2012 г. 19:45:50

Вы используете это как ШОРТКОД? То есть выполняете его внутри контента записи?

Chip Bennett Chip Bennett
6 июн. 2012 г. 19:51:09

Да, но я использую шорткод на странице, также мой контент пуст, только шорткод. В любом случае, что мне делать? Создать шаблон и избежать шорткода? Также я думаю, что должно сбрасываться предыдущее содержимое и создаваться новое с моим... Так где проблема? Я запутался.

Tommixoft Tommixoft
6 июн. 2012 г. 19:53:42

Страница является записью. Это не изменит ситуацию. В данном подходе столько ошибок, что я даже не знаю, с чего начать. Что вы в конечном итоге пытаетесь сделать? Вероятно, нам нужно переформулировать вопрос соответствующим образом, чтобы дать на него правильный ответ.

Chip Bennett Chip Bennett
6 июн. 2012 г. 20:18:16

как я уже говорил, я хочу сделать алфавитный список всех записей (выбранного мной типа записей, в данном случае страницы для примера). Чтобы посетители на одной странице могли видеть все записи, как в книжном указателе. Но я понял, что мне нужно использовать SQL, а не запрос к записям, спасибо за помощь, попробую новый подход.

Tommixoft Tommixoft
6 июн. 2012 г. 20:20:59
Показать остальные 2 комментариев
Все ответы на вопрос 2
1
10

Спасибо Chip Bennett, который указал мне на ошибку в использовании query_posts внутри контента. Вместо этого я использовал get_posts и получил желаемый результат, спасибо!

Вот пример решения, если у вас возникла аналогичная проблема:

function some_name(){

global $post;
$tmp_post = $post;
$args = array( 'post_type'=>'page', 'numberposts' => -1, 'orderby'=> 'title', 'order' => 'ASC' );
$myposts = get_posts( $args );

         if ( !empty($myposts) ) {
              foreach( $myposts as $post ) : setup_postdata($post);
              the_title();
              echo '<br>';             

              endforeach;

         } 

          $post = $tmp_post;

 }
6 июн. 2012 г. 20:31:50
Комментарии

Если вы добавите реальный код, который использовали для решения своего вопроса, я с радостью поставлю плюс.

Chip Bennett Chip Bennett
6 июн. 2012 г. 21:40:48
0
-1

В другом посте есть этот код внутри функции, но для тех, кто хочет просто добавить посты в алфавитном порядке в пользовательскую тему, например, можно использовать следующий код...

<?php // Сортировка постов из категории *** по алфавиту
global $post;
$temp_post = $post;
$args = array( 'category' => *categoryID*, 'numberposts' => -1, 'orderby' => 'title', 'order' => 'ASC' );
$these_posts = get_posts( $args );

if( !empty($these_posts) ) {
    foreach( $these_posts as $post ) : setup_postdata($post);
?>

<?php 

/* Здесь должен быть HTML/PHP код для отображения каждого поста */

the_title("<h2>", "</h2>");
the_content("<div class='content'>", "</div>"); 

?>

<?php 
    endforeach; // Конец цикла.
}
$post = $temp_post;
?>
19 мар. 2018 г. 21:37:44