Кастомный список постов не сортируется по дате.

Вопрос или проблема

На сайте я использую старую коммерческую тему (которая больше не обновляется).

Тема включает в себя пользовательский тип записи для Событий.

Таким образом, кликнув по левому меню, я попадаю на главную страницу администратора Событий, где нахожу список любых событий (традиционный список таблицы 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, а также проверить код, который вы предоставили.

Проблема: Неверная сортировка по дате

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

  1. Параметры регистрации пользовательского типа записи (post_type): Вы предоставили часть кода, в котором регистрируется пользовательский тип записи ‘event’. Для начала убедимся, что в аргументах, передаваемых функции register_post_type, указаны необходимые параметры для корректной работы сортировки.

  2. Параметры сортировки в админке: Для того чтобы админка сортировала записи по дате по умолчанию, необходимо установить параметр 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'); // Для сортировки по убыванию (новейшие сначала)
    }
}

Заключение

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

Таким образом, правильная реализация вышеуказанных рекомендаций должна решить вашу проблему с сортировкой записей по дате.

Оцените материал
Добавить комментарий

Капча загружается...