Skip to main content

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

В статье Вывод записей с помощью 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 указываем, что поле дата и время.

Чтобы не выводить записи до текущего дня в значении 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; ?>

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

code