Сортировка записей по произвольному полю дата и время в 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; ?>
Добавить комментарий