#php #jquery #mysql #wordpress #date
#php #jquery #mysql #wordpress #Дата
Вопрос:
В WordPress я создал пользовательский тип записи под названием «События» и добавил в пользовательские поля, используя расширенные пользовательские поля. У меня есть только базовые поля, поскольку наша потребность в календаре сама по себе является базовой.
Поля: Дата начала, Дата окончания, время начала, время окончания, Местоположение, Заголовок
Я пытаюсь запрашивать сообщения с помощью массива, который в основном «Если конечная дата больше сегодняшней даты, тогда показывайте сообщения».
Проблема в том, что в Advanced Custom Fields встроен DatePicker, который форматирует даты как ГГГГМДД, а не ГГГГ-ММ-ДД, как это делает PHP. Вот мой код, как он есть сегодня:
if (isset($_GET['_m'])) {
$current_month = $_GET['_m'];
$current_day = date('d'); // the actual day
$current_year = $_GET['_y'];
$future_year = 2016;
$startday = $current_year.$current_month.$current_day;
$endday = $future_year.$current_month.$current_day;
echo $startday;
echo $endday;
}
$args = array(
'post_type' => 'events',
'post_status' => 'publish',
'posts_per_page' => '10',
'meta_key' => 'event_date_ends',
'meta_query' => array(
'key' => 'event_date_ends',
'compare' => '>=',
'value' => $startday,
'type' => 'DATE'
),
'orderby' => 'meta_value_num',
'order' => 'ASC',
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
);
Я перепробовал не менее 20 вариантов и методов, конечным результатом которых было либо А) возвращаются все опубликованные «События», либо Б) Не возвращаются опубликованные «События».
Я пытаюсь отказаться от использования плагина календаря по разным причинам, главным образом потому, что большинство из них имеют большие ресурсы, а также клиент хочет, чтобы возвращаемые значения были указаны в частности, и я не смог найти плагин календаря, который был бы таким настраиваемым. Визуально он утвержден в том виде, в каком он есть сейчас, но прошлые события не будут автоматически удаляться сами по себе.
Обновить:
Я смог преобразовать дату расширенных пользовательских полей в ГГГГ-ММ-ДД и использовал этот код, однако он возвращает все «События»
$args = array(
'post_type' => 'events',
'post_status' => 'publish',
'posts_per_page' => '10',
'meta_query' => array(
'key' => 'event_date_ends',
'compare' => '>=',
'value' => date(Y-m-d),
'type' => 'DATE'
),
'orderby' => 'meta_value_num',
'order' => 'ASC',
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
);
Комментарии:
1. К вашему сведению, вы можете изменить формат, в котором ACF сохраняет дату.
2. @pmandell спасибо. Я смог внести изменения в формат!
Ответ №1:
Оказывается, мне просто нужно было преобразовать это через functions.php к метке времени unix, и это сработало.
functions.php
function custom_unixtimesamp ( $post_id ) {
if ( get_post_type( $post_id ) == 'events' ) {
$startdate = get_post_meta($post_id, 'event_date_begins', true);
if($startdate) {
$dateparts = explode('/', $startdate);
$newdate1 = strtotime(date('d.m.Y H:i:s', strtotime($dateparts[1].'/'.$dateparts[0].'/'.$dateparts[2])));
update_post_meta($post_id, 'unixstartdate', $newdate1 );
}
}
}
add_action( 'save_post', 'custom_unixtimesamp', 100, 2);
затем запрос
$today = time();
$args = array(
'post_type' => 'events',
'post_status' => 'publish',
'posts_per_page' => '10',
'meta_query' => array(
array(
'key' => 'unixstartdate',
'compare' => '>=',
'value' => $today,
)
),
'meta_key' => 'event_date_begins',
'orderby' => 'meta_value',
'order' => 'ASC',
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
);
Надеюсь, кто-то еще может найти это полезным.
Ответ №2:
Я нашел актуальную проблему, поэтому решил обновить.
В документации ACF говорится, что для сравнения дат нужно использовать $today = date (‘Ymd’), но вам действительно нужно использовать current_time(‘Ymd’), поэтому я удалил functions.php код, который я добавил и исправил проблему, вместо того, чтобы обойти ее.
Вот мой запрос сейчас
$event1 = current_time('Ymd');
$args = array(
'post_type' => 'events',
'post_status' => 'publish',
'posts_per_page' => '10',
'meta_query' => array(
array(
'key' => 'event_date_ends',
'compare' => '>=',
'value' => $event1,
)
),
'meta_key' => 'event_date_ends',
'orderby' => 'meta_value',
'order' => 'ASC',
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
);