Вопрос или проблема
На сайте я использую старую коммерческую тему (которая больше не обновляется).
Тема включает в себя пользовательский тип записи для Событий.
Таким образом, кликнув по левому меню, я попадаю на главную страницу администратора Событий, где нахожу список любых событий (традиционный список таблицы WP).
Проблема: так как я НЕ являюсь администратором сайта, я никогда не замечал, что таблица неправильно сортирует записи по дате. Чтобы она заработала, мне нужно дважды кликнуть по метке Дата в заголовке таблицы. Я не знаю, всегда ли так себя вела эта функция, потому что никогда не получал никаких жалоб. Моя цель – сделать так, чтобы таблица работала так, чтобы новое событие было первым в списке, в то время как в данный момент они отсортированы иначе (определенно не по Дате).
Я искал везде через файлы темы, но не смог найти причину этой проблемы (более того, несколько лет назад я сделал плагин для этого сайта, и плагин включает в себя идентичную таблицу, которая не вызывает проблем. Также список записей WP по умолчанию работает отлично).
По всей видимости, единственное, что связано с Событиями, это следующее (я нашел это в файле инициализации темы):
function events_post_register()
{$labels = array(
'name' => __('События', 'taxonomy general name', CORE_THEME_NAME),
'singular_name' => __('Событие', CORE_THEME_NAME),
'search_items' => __('Поиск Событий', CORE_THEME_NAME),
'all_items' => __('Все События', CORE_THEME_NAME),
'parent_item' => __('Родительское Событие', CORE_THEME_NAME),
'edit_item' => __('Редактировать Событие', CORE_THEME_NAME),
'update_item' => __('Обновить Событие', CORE_THEME_NAME),
'add_new_item' => __('Добавить Новое Событие', CORE_THEME_NAME),
'menu_name' => __('События', CORE_THEME_NAME)
);
$args = array(
'labels' => $labels,
'singular_label' => __('События', CORE_THEME_NAME),
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'hierarchical' => true,
'exclude_from_search' => true,
'capability_type' => 'post',
'query_var' => 'event',
'rewrite' => array(
'slug' => 'event',
'with_front' => false,
),
'menu_icon' => 'dashicons-calendar',
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt',
'comments',
'custom-fields'
)
);
register_post_type( 'event', $args );
}
Любая помощь будет оценена. 🙂
Ответ или решение
Для решения проблемы сортировки списка событий по дате в пользовательском типе записи на вашем сайте, необходимо разобраться с тем, как происходит сортировка записей в WordPress, а также проверить код, который вы предоставили.
Проблема: Неверная сортировка по дате
Судя по вашему описанию, вы столкнулись с проблемой, когда записи событий не сортируются должным образом по дате. Чтобы обеспечить правильную сортировку, мы можем сосредоточиться на нескольких ключевых аспектах:
-
Параметры регистрации пользовательского типа записи (
post_type
): Вы предоставили часть кода, в котором регистрируется пользовательский тип записи ‘event’. Для начала убедимся, что в аргументах, передаваемых функцииregister_post_type
, указаны необходимые параметры для корректной работы сортировки. -
Параметры сортировки в админке: Для того чтобы админка сортировала записи по дате по умолчанию, необходимо установить параметр
menu_position
, а также убедиться, что запись содержит необходимое поле — дату (параметрsupports
).
Верное использование аргументов
В вашем коде не хватает установки аргумента query_var
, которое могло бы помочь обеспечить правильную сортировку. Однако, чтобы сортировка работала, необходимо убедиться, что записи включают метаданные нужного формата. В WordPress бывает так, что дата создания записи не указывается или не соответствует ожидаемым форматам.
Как улучшить сортировку
Вы можете улучшить сортировку, добавив возможность использования метаполя в вашем типе записи. В частности, учитывайте:
- Убедитесь, что ваша тема или плагин, отвечающий за отображение событий, правильно обрабатывает поле даты.
- Попробуйте добавить следующее в функцию регистрации пользовательского типа записи, чтобы использовать стандартное поле даты:
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt',
'comments',
'custom-fields',
'revisions', // Добавьте поддержку ревизий, если это необходимо
'page-attributes' // Если вам нужно использовать атрибуты страниц
),
'rewrite' => array(
'slug' => 'event',
'with_front' => false,
),
Изменение параметров сортировки
Возможно, вам также потребуется изменить параметры сортировки с помощью фильтров WordPress. Это можно сделать, добавив следующий код в файл functions.php
вашей темы:
add_filter('pre_get_posts', 'sort_events_by_date');
function sort_events_by_date($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
if ('event' == $query->get('post_type')) {
$query->set('orderby', 'date');
$query->set('order', 'DESC'); // Для сортировки по убыванию (новейшие сначала)
}
}
Заключение
После внесения этих изменений, вы должны увидеть, что записи событий начинаются с новых и сортируются по убыванию даты. Обязательно протестируйте эти изменения в безопасной среде, прежде чем внедрять их на живом сайте. Если проблема сохраняется, следует проверить наличие конфликта с другими плагинами или темами.
Таким образом, правильная реализация вышеуказанных рекомендаций должна решить вашу проблему с сортировкой записей по дате.