Выбор даты и времени (Date Time Picker)

Обзор

Поле «дата и время» позволяет выбрать дату и время с помощью всплывающего окна на jquery. Это поле может использоваться для указания точной даты и времени в вашей теме. Например, можно указать начальную и конечную даты.

Значение может быть возвращено и отображено в разных форматах, но всегда будет сохранено в БД как «Y-m-d H: i: s». Этот формат используется во всех таблицах базы данных WP и позволит легко производить запросы к БД.

История изменений

  • Добавлено в 5.3.9

Настройки

ИмяОписание
Отображаемый форматФормат во время редактирования поля в админке. Посмотрите полный список форматов дат для PHP.
Возвращаемый форматФормат возвращаемого значения на бэкенде.  Посмотрите полный список форматов дат для PHP.
День начала неделиНужно для использования календаря в разных странах.

Использование в шаблоне

Поле «дата и время» вернет строку, содержащую значение даты и времени в формате, указанном в настройках поля.

Базовый

В примере показано как вывести поле «дата и время».

<p>Дата мероприятия: <?php the_field('start_date'); ?></p>

Query posts

В примере показано, как сделать query запрос к БД и перебрать полученные посты с помощью цикла loop. Тип поста будет ‘event’ (мероприятие). Мы упорядочим данные по значению произвольного поля даты и времени.

<?php

// query запрос
$posts = get_posts(array(
	'posts_per_page'	=> -1,
	'post_type'			=> 'event',
	'order'				=> 'ASC',
	'orderby'			=> 'meta_value',
	'meta_key'			=> 'start_date',
	'meta_type'			=> 'DATETIME'
));

if( $posts ): ?>

	<h2>Все мероприятия</h2>
	<ul id="events">
		<?php foreach( $posts as $p ): ?>
			<li>
				<strong><?php echo $p->post_title; ?></strong>: <?php the_field('start_date', $p->ID); ?> -  <?php the_field('end_date', $p->ID); ?>
			</li>	
		<?php endforeach; ?>
	</ul>

<?php endif; ?>

Query posts (для текущих мероприятий)

В коде ниже показано, как запрашивать и перебирать мероприятий, которые в данный момент выполняются (они начались, но еще не закончились). Мы упорядочим данные по значению произвольного поля даты и времени.

При работе с массивом meta_query помните, что WP читает это как $meta $compare $value («start_date» < $ now) («end_date» > $ now).

<?php

// время сейчас
$date_now = date('Y-m-d H:i:s');


// query запрос
$posts = get_posts(array(
	'posts_per_page'	=> -1,
	'post_type'			=> 'event',
	'meta_query' 		=> array(
		'relation' 			=> 'AND',
		array(
	        'key'			=> 'start_date',
	        'compare'		=> '<=',
	        'value'			=> $date_now,
	        'type'			=> 'DATETIME'
	    ),
	    array(
	        'key'			=> 'end_date',
	        'compare'		=> '>=',
	        'value'			=> $date_now,
	        'type'			=> 'DATETIME'
	    )
    ),
	'order'				=> 'ASC',
	'orderby'			=> 'meta_value',
	'meta_key'			=> 'start_date',
	'meta_type'			=> 'DATE'
));

if( $posts ): ?>

	<h2>Мероприятия, которые проходят сейчас</h2>
	<ul id="events">
		<?php foreach( $posts as $p ): ?>
			<li>
				<strong><?php echo $p->post_title; ?></strong>: <?php the_field('start_date', $p->ID); ?> -  <?php the_field('end_date', $p->ID); ?>
			</li>	
		<?php endforeach; ?>
	</ul>

<?php endif; ?>

Query posts (для будущих мероприятий)

В этом примере показано, как запрашивать и перебирать предстоящие события (в ближайшие 7 дней). Мы упорядочим данные по значению произвольного поля даты и времени.

<?php

// время сейчас
$date_now = date('Y-m-d H:i:s');
$time_now = strtotime($date_now);


// время через 7 дней
$time_next_week = strtotime('+7 day', $time_now);
$date_next_week = date('Y-m-d H:i:s', $time_next_week);


// query запрос
$posts = get_posts(array(
	'posts_per_page'	=> -1,
	'post_type'			=> 'event',
	'meta_query' 		=> array(
		array(
	        'key'			=> 'start_date',
	        'compare'		=> 'BETWEEN',
	        'value'			=> array( $date_now, $date_next_week ),
	        'type'			=> 'DATETIME'
	    )
    ),
	'order'				=> 'ASC',
	'orderby'			=> 'meta_value',
	'meta_key'			=> 'start_date',
	'meta_type'			=> 'DATETIME'
));

if( $posts ): ?>

	<h2>Мероприятия на этой неделе</h2>
	<ul id="events">
		<?php foreach( $posts as $p ): ?>
			<li>
				<strong><?php echo $p->post_title; ?></strong>: <?php the_field('start_date', $p->ID); ?> -  <?php the_field('end_date', $p->ID); ?>
			</li>	
		<?php endforeach; ?>
	</ul>

<?php endif; ?>

Сохранение значений как unix timestamp

По-умолчанию значение сохраняется в формате «Y-m-d H: i: s». Нам может потребоваться изменить его метку времени Unix. Это может быть необходимо для обеспечения совместимости.

<?php 

add_filter('acf/update_value/type=date_time_picker', 'my_update_value_date_time_picker', 10, 3);

function my_update_value_date_time_picker( $value, $post_id, $field ) {
	
	return strtotime($value);
	
}

?

Похожие