Изменение порядка записей ПОСЛЕ выполнения запроса в WordPress
Я вывожу последние 5 записей пользовательского типа 'show'.
Сейчас я получаю последнюю запись первой.
<?php
$args = array(
'post_type' => 'show', // Тип записи
'posts_per_page' => 5, // Количество записей
'order' => 'DESC' // Порядок сортировки
);
$home_shows = new WP_Query($args); // Создаем запрос
var_dump($home_shows); // Выводим данные запроса
?>
Мне нужно, чтобы в полученном массиве самая ранняя запись (из последних 5 шоу) была первой, а самая последняя - последней.
Сейчас я получаю (дата шоу берется из произвольного поля):
11.03.12, 7.03.12, 4.03.12, 2.03.12, 30.02.12 и т.д.
А нужно: 30.02.12, 1.03.12, 4.03.12, 7.03.12, 11.03.12
Я пробовал использовать array_reverse (добавил в предыдущий код):
$reversed_shows = array_reverse( $home_shows->posts ); // Пытаемся развернуть массив
Но получил странные результаты (отображались совершенно другие части записи, порядок массива был нарушен).
Есть идеи?
Я понял, в чём была моя ошибка. Обычная ошибка новичка.
Функция array_reverse работала правильно, но я не переназначал перевёрнутый массив обратно в WP_Query $home_shows, поэтому не видел изменений.
Вот решение и исправленный код.
<?php
$args = array(
'post_type' => 'show',
'posts_per_page' => 5,
'order' => 'DESC',
);
$home_shows = new WP_Query($args);
//переворачиваем порядок записей, чтобы последняя была в конце
$array_rev = array_reverse($home_shows->posts);
//переназначаем перевёрнутый массив записей обратно в объект $home_shows
$home_shows->posts = $array_rev;
?>
<?php $captions = array(); ?>
<?php if ( $home_shows->have_posts() ) : ?>
<?php while ( $home_shows->have_posts() ) : $home_shows->the_post(); ?>
Спасибо за ответы, рад что разобрался с этой проблемой.

Какой ещё беспорядок с произвольными полями? Произвольный тип записи? Он необходим, так как на сайте есть несколько произвольных типов записей для организации контента. Я постараюсь лучше объяснить, что я имею в виду, через редактирование записи

Извиняюсь за неправильный выбор слов. Произвольные поля доступны и для стандартных типов записей. Просто для произвольного типа записи вам нужен только 'post_type', который у вас уже есть. Верно ли, что вы хотите отображать последние записи первыми?

<?php
$args = array(
'post_type' => 'show',
'posts_per_page' => 5,
'order' => 'desc'
);
$home_shows = new WP_Query($args);
// var_dump($home_shows);
echo "<pre>";
print_r($home_shows->posts);
echo "</pre>";
$array_rev = array_reverse($home_shows->posts);
echo "<pre>";
print_r($array_rev);
echo "</pre>";
?>
Я попробовал вышеуказанный код для моего произвольного типа записей...
результаты ID записей: 240,239,238,237 для обратного порядка: 237,238,239,240
Должно быть что-то другое проблематично на вашей стороне......

Зачем использовать reverse для массива? Просто измените порядок на ASC, и последние записи будут выводиться первыми.

@RutwickGangurde Я думаю, вы не поняли его требования... он хочет получить последние 5 записей и отобразить их в таком порядке, чтобы из этих пяти записей сначала шла запись с самой ранней датой...

Если вам нужно изменить порядок основного запроса, я рекомендую использовать следующий хук:
add_action('the_posts',function($posts,$query){
// Проверяем, что это основной запрос
if( $query->is_main_query() ){
// Сортируем записи по дате изменения
usort($posts,function ($a, $b) {
return strtotime($b->post_modified) - strtotime($a->post_modified);
});
}
return $posts;
},10,2);
В этом примере я сортирую записи по дате изменения (post_modified), но вы можете использовать другую логику.
