У меня есть запрос query_posts в шаблоне WP. С помощью плагина «Больше полей» я могу дать администратору сайта возможность создать событие (пользовательский тип записи), а затем ввести дату в формате: ГГГГ / мм / дд.
Главный вопрос: какое значение я должен передать в значение параметра в массиве meta_query? В настоящее время я пытаюсь передать "date (" Y / m / dh: i A ")" (минус кавычки), потому что, насколько я понимаю, это напечатает текущую дату сегодня. Меня не волнует время свидания, так что это может быть неактуально. В конечном счете, я пытаюсь использовать опцию сравнения, чтобы зафиксировать предстоящие события, прошедшие события в разных местах на этом сайте. В другом месте мне нужно передать параметр value массив, который печатает первый и последний день текущего месяца, ограничивая вывод событиями, происходящими в этом месяце.
<?php
query_posts( array(
'post_type' => 'event', // only query events
'meta_key' => 'event_date', // load up the event_date meta
'orderby' => 'meta_value', // sort by the event_date
'order' => 'asc', // ascending, so earlier events first
'posts_per_page' => '2',
'meta_query' => array( // restrict posts based on meta values
'key' => 'event_date', // which meta to query
'value' => date("Y/m/d h:i A"), // value for comparison
'compare' => '>=', // method of comparison
'type' => 'DATE' // datatype, we don't want to compare the string values
) // end meta_query array
) // end array
); // close query_posts call
?>
'type' => 'DATE'
?date_i18n()
вместо нативного phpdate()
.Во многом это зависит от того, как ваша дата хранится в мета-значении. В целом, хорошая идея хранить даты в MySQL как даты / метки времени MySQL.
Временные метки MySQL имеют формат
Y-m-d h:i:s
.Тем не менее, всегда полезно использовать собственные функции управления датой в WP. Таким образом, чтобы получить текущую дату в формате MySQL, используйте
current_time('mysql')
.Чтобы форматировать дату MySQL для отображения, используйте
mysql2date($format, $mysql_date)
. В этом случае лучше всего отображать дату в соответствии с настройками, поэтому используйте$format = get_option('date_format');
.Чтобы сохранить выбранную пользователем дату, вам придется перекодировать ее в дату MySQL. Для этого самый простой, но не самый безопасный способ
date('Y-m-d h:i:s', $unix_timestamp);
.$unix_timestamp
часто можно получить с помощьюstrtotime($user_input)
.Однако сам по себе
strtotime()
он не проверяет работоспособность, поэтому лучше написать собственную функцию общения.Что касается получения диапазона месяцев, вот функция, которую я использую, чтобы получить границы месяца для любой метки времени MySQL:
Если вы хотите получить границы недели, в WP уже есть функция для этого:,
get_weekstartend($time);
которая также доставляет границы в виде массива.Затем вы можете использовать их в своем
meta_query
аргументе, выполнив два отдельных сравнения.источник
Y-m-d G:i:s
»?G:i:s
24 часа,h:i:s
12 часов.Я закончил со следующим. Я настраиваю поле события-momth и сравниваю оттуда. Спасибо за помощь
источник
Привет ниже, я публикую свое решение. Где я сохранил дату в
Y-m-d H:i
формате (например, 2013-07-31 16:45).Событие, которое заканчивается после сегодняшнего дня, будет запрошено только
meta_query
.date_default_timezone_set('Asia/Calcutta');
Я установил часовой пояс по умолчанию для
date()
функции.источник