Сортировка записей по произвольному полю дата и время в WordPress

30 сентября 2019 WordPress ACF
В статье Вывод записей с помощью WP_Query{} я уже показывал, как можно выводить записи по различным параметрам и как использовать простую сортировку постов. Недавно возникла задача вывода записей с доп.полем типа Дата и время и сортировка по нему. Про доп. поля в WordPress можно почитать в этой статье.
Список записей не что иное, как афиша мероприятий. Поэтому ещё одним условием было не выводить мероприятия, которые уже прошли, т.е. те, у которых дата установлена раньше текущего дня.
Собственно к записям было добавлено поле Дата и время через плагин ACF(Advanced Custom Fields). А вот код, которым получилось осуществить задуманное:
<?php
// задаем параметры выборки в массиве
$args = array(
'cat' => array(3,4), // ID рубрики
'posts_per_page' => 8, // выводить по 8
'meta_key' => 'date',
'orderby' => 'meta_value_num date',
'order' => 'ASC',
'meta_type' => 'DATETIME',
'meta_query' => array(
array(
'key' => 'date',
'value' => date('Y.m.d H:i'),
'compare' => '>=',
'type' => 'DATETIME'
)
),
);
// запрос
$query = new WP_Query( $args );
// далее цикл вывода постов
?>Что здесь. Во-первых задаем ID рубрик, их здесь две, и выводим их по 8. Далее в meta_key задаем имя поля с датой, указываем сортировку по дате в orderby и ASC — по возрастанию. В meta_type указываем, что поле дата и время. Кулинарный форум Culinarie.ru
Чтобы не выводить записи до текущего дня в значении meta_queryопять же указываем key — это имя нашего поля, в value текущие дату и время и в compare знаки больше и равно. Что означает выводить только те записи, у которых дата и время больше или равны текущей дате. И в поле type указываем, что это поле дата и время.
Полный код примера:
<?php
// задаем параметры выборки в массиве
$args = array(
'cat' => array(3,4), // ID рубрики
'posts_per_page' => 8, // выводить по 8
'meta_key' => 'date',
'orderby' => 'meta_value_num date',
'order' => 'ASC',
'meta_type' => 'DATETIME',
'meta_query' => array(
array(
'key' => 'date',
'value' => date('Y.m.d H:i'),
'compare' => '>=',
'type' => 'DATETIME'
)
),
);
// запрос
$query = new WP_Query( $args );
?>
<?php if ( $query->have_posts() ) : ?>
<!-- цикл -->
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php endwhile; ?>
<!-- конец цикла -->
<?php wp_reset_postdata(); //очищаем результат запроса?>
<?php else : ?>
<p><?php esc_html_e( 'Ничего не найдено.' ); ?></p>
<?php endif; ?>
Добавить комментарий