Как запросить последние 5 записей и отсортировать их по заголовку?
Мне нужно создать меню со списком последних "n" записей, где число "n" будет определяться пользователем и храниться в настройках.
n = 5; // Получить последние 5 записей из базы данных.
Скрипт, который я сейчас использую (ниже), получает все записи из базы данных, а затем отображает только последние 5 из этой коллекции.
Это работает нормально, пока я не решаю отсортировать список по заголовку. Когда я это делаю, вместо сортировки последних 5 записей по заголовку, происходит сортировка всей коллекции записей, без учета даты их публикации.
Есть ли советы, как изменить этот запрос, чтобы получить только последние "n" записей, а затем отсортировать только эти 5 по заголовку.
(Примечание: Меня особенно интересует запрос get_p() внутри элемента UL. Первый запрос ($myquery) здесь только для проверки наличия записей перед продолжением.)
function recent_posts(){
$catHidden=get_cat_ID('hidden');
$myquery = new WP_Query();
$myquery->query(array('cat' => "-$catHidden",'post__not_in' => get_option('sticky_posts')));
$myrecentpostscount = $myquery->found_posts;
if ($myrecentpostscount > 0){ ?>
<ul>
<?php
global $post;
if(get_option('mySort') == 'asc'){
$sortOrder='title';$sortDirection='asc';
}
$myrecentposts = get_posts
(
array
(
'post__not_in' => get_option('sticky_posts'),
'cat' => "-$catHidden",
'numberposts' => get_option('cb2_latest_count'),
'orderby' => $sortOrder,
'order' => $sortDirection
)
);
foreach($myrecentposts as $idxrecent=>$post) {
//ОТРИСОВКА МЕНЮ ЗАПИСЕЙ
}
wp_reset_postdata();
}

$yourquery = new WP_Query('posts_per_page=5&orderby=title');
сделает это.
Редактирование Добавленный ответ
<?php
$posts = new WP_Query('posts_per_page=5');
foreach($posts->posts as $post){
$sorted[$post->ID] = $post->post_title;
}
asort($sorted, SORT_STRING);
foreach($sorted as $k=>$v){
//ваш цикл -- используйте ID для вызова каждого элемента
the_title($k);
the_content($k);
}
?>

Спасибо за ответ, MF, но я еще не совсем разобрался. Думаю, что может сбивать с толку то, что меня действительно беспокоит второй запрос, get_posts(). Он все еще выбирает из всей коллекции записей, а не из последних 5

почему бы вам сначала не получить их, а затем не отсортировать? Если ваша проблема в том, что вы получаете не те записи, сначала получите нужные, а потом упорядочьте их.

Да, именно это я и хочу сделать. Однако, когда у вас есть последние 5 записей, они уже упорядочены по дате (сначала самые новые). Я хочу затем взять эти 5 записей и отсортировать их по алфавиту перед тем, как передавать их в цикл for. Как тогда указать циклу for, в каком порядке их располагать?

используйте следующий код и измените его по своему усмотрению:
// получить последние пять записей
$latestposts = get_posts(); // по умолчанию выбираются последние 5 записей
// получить только ID записей
$keys = array_keys($latestposts);
// получить те же 5 записей, но отсортированные по заголовку
$fivepostsorderedbytitle = get_posts(array('orderby' => 'post_title', 'post__in' => $keys));
