skillbox banner 468x60skillbox banner 728x90skillbox banner 930x180etxt banner 468x60etxt banner 728x90etxt banner 930x180beget banner 468x60beget banner 728x90beget banner 930x180

Как на хуке pre_get_posts сделать сортировку по полю, которое является датой?

Чтобы сделать сортировку записей по полю, которое является датой, используя хук pre_get_posts, нужно настроить параметры запроса с помощью метода $query->set().

Вот пример кода:

function sort_posts_by_date_field( $query ) {
    // Проверяем, чтобы это был основной запрос (main query) и не был запрос в админке
    if ( ! is_admin() && $query->is_main_query() ) {
        // Убедитесь, что это нужный тип записей или архив
        if ( $query->is_post_type_archive( 'your_post_type' ) || $query->is_tax( 'your_taxonomy' ) ) {
            // Укажите мета-ключ вашего поля с датой
            $meta_key = 'your_date_field';

            // Настраиваем параметры запроса
            $query->set( 'meta_key', $meta_key );
            $query->set( 'orderby', 'meta_value' );
            $query->set( 'meta_type', 'DATE' ); // Указываем тип поля (дата)
            $query->set( 'order', 'ASC' ); // Или DESC, если нужно в обратном порядке
        }
    }
}
add_action( 'pre_get_posts', 'sort_posts_by_date_field' );

Объяснение:

  1. Проверка запроса:
    • is_admin() исключает выполнение кода в админке.
    • is_main_query() проверяет, является ли это основной запрос (чтобы не затронуть второстепенные запросы).
  2. Проверка типа архива:
    • is_post_type_archive( 'your_post_type' ) используется для конкретного типа записей.
    • is_tax( 'your_taxonomy' ) проверяет архивы для определенной таксономии.
  3. Сортировка:
    • meta_key — ключ вашего пользовательского поля.
    • orderby — указывает, что сортировать нужно по значению мета-поля.
    • meta_type — важный параметр, указывающий, что это поле с типом DATE.
    • order — порядок сортировки (ASC для возрастающего или DESC для убывающего).

Пример с реальным полем:

Если у вас есть пользовательское поле с ключом event_date, вы можете заменить 'your_date_field' на 'event_date'.

Примечания:

  • Убедитесь, что поле с датой сохраняется в формате YYYY-MM-DD для корректной сортировки.
  • Если формат даты отличается (например, dd-mm-yyyy), нужно дополнительно преобразовать значения в формате запроса.
flexbe banner 480x320flexbe banner 728x90flexbe banner 120x600kwork banner 480x320kwork banner 728x90kwork banner 120x600jivo banner 480x320jivo banner 728x90jivo banner 120x600

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Похожие посты

Как из стандартного типа записи post удалить «uncategorized» из ссылки в WordPress?

При создании записей в WordPress без указания категории по умолчанию им присваивается категория «Без рубрики» («Uncategorized»). Это приводит к появлению лишней части ссылки, например: https://example.com/bez-rubriki/nazvanie-zapisi. Если вы хотите убрать «bez-rubriki» из URL, то вам потребуется немного модифицировать настройки и добавить пользовательский код. В этой статье я покажу, как это сделать и избежать ошибок 404. Шаг…
Подробнее

Как на WordPress сделать архивную страницу со всеми авторами и структуру ссылок домен/authors/author

Чтобы сделать архивную страницу в WordPress, которая перечисляет всех авторов и предоставляет доступ к их страницам профилей через структуру ссылок вида домен/authors/author, нужно выполнить следующие шаги: 1. Создание пользовательской страницы для архива авторов Создайте файл шаблона: В вашей активной теме создайте файл page-authors.php. Это будет специальная страница, отображающая список всех авторов. Добавьте код для вывода…
Подробнее

Как сделать функцию для редиректа со старых ссылок сайта на новые в WordPress?

Для создания функции редиректа в WordPress со старых ссылок на новые, можно использовать файл .htaccess или написать специальный код в functions.php темы. Рассмотрим оба варианта: 1. Редирект через .htaccess Если вам нужно выполнить редиректы для множества старых URL, проще всего это сделать через файл .htaccess в корне вашего сайта. Для этого откройте или создайте файл…
Подробнее