Для многих проектов на WordPress возникает задача вывести список записей в нестандартном, произвольном порядке, отличном от стандартной сортировки по дате или алфавиту. В этой статье подробно разберём, как создать уникальный список постов с заказанным порядком, используя стандартные возможности WordPress и минимальный код. Это позволит вам гибко управлять выводом контента на сайте без громоздких плагинов.
Почему стандартные сортировки WordPress не всегда подходят
По умолчанию WordPress сортирует записи по дате публикации, что удобно для блогов. Но что делать, если нужно вывести посты в порядке, который задаётся вручную, например, для подборки рекомендуемых материалов, портфолио или рекламных блоков? Стандартные параметры orderby в WP_Query не позволяют реализовать произвольный порядок без дополнительных доработок.
Можно использовать сортировку по пользовательским полям (мета-данным), но это требует хранения и обновления специального поля с порядковым номером для каждой записи. Рассмотрим, как это сделать на практике.
Создаём пользовательское поле для порядка сортировки
Для начала каждому посту в нужной категории или типе нужно задать уникальное числовое значение порядка. Это можно сделать вручную в админке или программно.
Например, добавим мета-поле wp_log_post_order с числом, определяющим позицию записи в списке.
Чтобы добавить поле вручную:
- Откройте пост в редакторе WordPress.
- Включите мета-бокс "Пользовательские поля" (если не видите, включите его в настройках экрана).
- Добавьте новое поле
wp_log_post_orderс числом, например, 10. - Сохраните запись.
Для массового добавления и обновления можно использовать функции PHP.
Пример кода для массового обновления порядка
function wp_log_update_post_order($post_id, $order) {
update_post_meta($post_id, 'wp_log_post_order', intval($order));
}
// Пример вызова для нескольких постов
wp_log_update_post_order(123, 1);
wp_log_update_post_order(124, 2);
wp_log_update_post_order(125, 3);Этот код можно адаптировать в админке или в отдельном скрипте для установки порядка.
Выводим список постов в заданном порядке с помощью WP_Query
Для вывода списка с учётом пользовательского поля нужно указать сортировку по мета-значению wp_log_post_order. Вот пример запроса:
$args = [
'post_type' => 'post',
'posts_per_page' => 10,
'meta_key' => 'wp_log_post_order',
'orderby' => 'meta_value_num',
'order' => 'ASC',
];
$query = new WP_Query($args);
if ($query->have_posts()) {
echo '<ul>';
while ($query->have_posts()) {
$query->the_post();
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}
echo '</ul>';
wp_reset_postdata();
}Обратите внимание, что мы используем meta_value_num для числовой сортировки, чтобы порядок был корректным.
Обработка случаев, когда поле не задано
Если у некоторых постов нет мета-поля wp_log_post_order, они не попадут в выборку, либо попадут в конец, в зависимости от настроек. Чтобы включить все записи, можно добавить сортировку с запасным вариантом, но для простоты лучше заполнить поле у всех нужных постов.
Автоматизация установки порядка с помощью плагина Clearfy Pro
Если вы используете Clearfy Pro, в нём есть инструменты для массового управления мета-данными и оптимизации запросов. Это позволяет быстрее настраивать порядок без написания кода.
Также Clearfy Pro помогает оптимизировать запросы WP_Query, уменьшая нагрузку на базу данных при сложных сортировках.
Расширенные возможности: создание интерфейса сортировки в админке
Чтобы не редактировать мета-поля вручную, можно добавить в админку интерфейс перетаскивания для сортировки постов. Для этого подойдёт плагин WPExpert Review или собственное решение на JavaScript с использованием AJAX.
Пример простой реализации:
- Добавить кастомную страницу или мета-бокс с таблицей постов.
- Сделать строки перетаскиваемыми с помощью jQuery UI Sortable.
- При изменении порядка отправлять AJAX-запрос на сервер.
- Обновлять мета-поля
wp_log_post_orderсогласно новой позиции.
Это позволит редакторам сайта просто и быстро менять порядок вывода без лишних усилий.
Заключение
Создать уникальный список постов с заказанным порядком в WordPress несложно, если использовать пользовательские поля и правильно настроить WP_Query. Такой подход универсален, не требует сложных плагинов и легко расширяется. Для удобства работы с порядком можно добавить интерфейс сортировки в админке и использовать инструменты оптимизации, например, из Clearfy Pro.