Intereting Posts

Показывать будущие события на основе настраиваемого поля И порядок по дате

У меня есть настраиваемый тип контента (событие), в этом типе у меня есть настраиваемое поле даты с именем: 'date'. В моем шаблоне я запускаю WP_Query для возврата списка событий. Я хотел бы только получать события, которые в будущем (в соответствии с моим пользовательским полем «дата»), а затем упорядочить список по тому же полю.

Я пробовал следующее, но он просто возвращает список всех «событий» в системе, независимо от даты

$today = date('d M, y'); $args = array ( 'post_type' => 'event', 'meta_query' => array( array( 'key' => 'date', 'value' => $today, 'compare' => '>', 'type' => 'CHAR', ), ), 'meta_key' => 'date', 'orderby' => 'meta_value_num', 'order' => 'ASC' ); 

В качестве примечания: если я заменю тип от «CHAR» до «DATE», я не получаю никаких возвращенных результатов …

Solutions Collecting From Web of "Показывать будущие события на основе настраиваемого поля И порядок по дате"

Я нашел актуальную проблему, поэтому подумал, что обновляюсь.

В документации 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 ), ); 

Поэтому для вашего запроса попробуйте это

 $today = current_time('d M, y'); $args = array ( 'post_type' => 'event', 'meta_query' => array( array( 'key' => 'date', 'value' => $today, 'compare' => '>=', ), ), 'meta_key' => 'date', 'orderby' => 'meta_value', 'order' => 'ASC' ); 

Просто убедитесь, что current_time ('d M, y') – это то, как ваши данные хранятся через любой выбранный вами выбор даты или если вы печатаете его в каждом событии в поле, которое вы вводите в . d M, y будет читать 19 июня, 14. Помните, что ваша дата отображения и сохраненная дата могут читать по-разному. Надеюсь, это поможет.

Вот что я сделал. Я использую плагин Advance Custom Fields для настраиваемых полей. Я следовал инструкциям здесь: http://wordpress.org/support/topic/plugin-advanced-custom-fields-sorting-by-date-picker , в котором говорится, что самый простой способ сделать это – сравнить даты в формате timestamp unix ,

Поле даты в ACF называется: event_start
Дата сохраняется в моей базе данных в формате yymmdd
У меня есть тип пользовательских сообщений: события

Шаг 1 – создать поле Start Date в ACF.
Шаг 2 заключается в том, чтобы добавить эту функцию к вашим функциям.php (при условии, что PHP> 5.3). Эта функция использует мой пользовательский интерфейс для чтения и конвертирует в временную метку Unix и сохраняет ее в другой мета-строке сообщения.

 function custom_unixtimesamp ( $post_id ) { if ( get_post_type( $post_id ) == 'events' ) { $startdate = get_post_meta($post_id, 'event_start', true); if($startdate) { $newdate = DateTime::createFromFormat('Ymd', $startdate)->getTimestamp(); update_post_meta($post_id, 'unixstartdate', $newdate ); } } } add_action( 'save_post', 'custom_unixtimesamp', 100, 2); 

Шаг 3, теперь вы можете сортировать и сравнивать на отметке времени Unix

 $today = time(); $args = array( 'post_type' => 'events', 'posts_per_page' => '50', 'meta_query' => array( array( 'key' => 'unixstartdate', 'compare' => '>=', 'value' => $today, ) ), 'meta_key'=>'event_start', 'orderby' => 'meta_value_num', 'order' => 'ASC' ); $wp_query = new WP_Query( $args ); 

Предложение Марка было довольно близко.

Вот что сработало для меня, и вы тоже можете попробовать.

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('dmY 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 ), ); 

Вам не нужно беспокоиться о том, чтобы помещать что-либо в ваш файл functions.php или сохранять метки времени и т. Д. Все, что вам нужно сделать, это добавить правильное значение « type » в ваш массив meta_query, чтобы он знал, что вы сравниваете даты , Таким образом, значение « type » должно быть « DATE » …

Например…

 $today = current_time('Ym-d'); $args = array ( 'post_type' => 'event', 'meta_query' => array( array( 'key' => 'event_date', 'value' => $today, 'compare' => '>=', 'type' => 'DATE', ), ), 'meta_key' => 'event_date', 'orderby' => 'meta_value', 'order' => 'ASC' ); 

… В этом примере мое мета-поле сохранения даты называется «event_date», и я проверяю записи с датами в будущем (или сегодня).