Intereting Posts
WP Query имеет липкие сообщения сперва, с разбивкой на страницы и с совместным сообщением на странице с основным контуром Как WordPress не включает / отключает плагин? Тессерактная детская тема загружается медленно Как отключить быстрые клавиши TinyMCE 4 Переопределение учетных данных для входа в WP как я могу поставить в очередь мою таблицу стилей для детей / s * после * каждую таблицу стилей / родительских таблиц? пользовательский файл шаблона сообщения не показан, а все время 404.php Включить файлы в файл функций дочерних тем Добавление настраиваемых полей в собственные настройки галереи wp Отключить панель администратора на странице плагина Почему ограничение загрузки файлов WordPress настолько низкое? Меняет ли это вред? Галерея размещает изображения на главной странице? Запрос: список офсетных сообщений, если только это не определенная категория wp-includes / comment-template.php: 26 – Попытка получить свойство не объекта Как сделать черновик сообщений доступным для всех?

Дата запроса в цепочке wordpress

В настоящее время у меня есть настраиваемый тип сообщений, называемый «события». Я создал это из учебника здесь http://tatiyants.com/how-to-use-wordpress-custom-post-types-to-add-events-to-your-site/ . Я хочу запросить дату, чтобы показывать только сообщения с датами, а не те, которые были в прошлом. $event_date >= time

Однако в учебнике он отображает результаты с использованием короткого кода. Я пытаюсь преобразовать это в стандартный цикл wp, чтобы я мог отображать его в моем index.php. Он использует следующее в своей функции shortcode:

 add_shortcode( 'events', 'get_events_shortcode' ); function get_events_shortcode($atts){ global $post; // get shortcode parameter for daterange (can be "current" or "past") extract( shortcode_atts( array( 'daterange' => 'current', ), $atts ) ); ob_start(); // prepare to get a list of events sorted by the event date $args = array( 'post_type' => 'events', 'orderby' => 'event_date', 'meta_key' => 'event_date', 'order' => 'ASC' ); query_posts( $args ); $events_found = false; // build up the HTML from the retrieved list of events if ( have_posts() ) { while ( have_posts() ) { the_post(); $event_date = get_post_meta($post->ID, 'event_date', true); switch ($daterange) { case "current": if ($event_date >= time() ) { echo get_event_container(); $events_found = true; } break; case "past": if ($event_date < time() ) { echo get_past_event_summary(); $events_found = true; } break; } } } wp_reset_query(); if (!$events_found) { echo "<p>no events found.</p>"; } $output_string = ob_get_contents(); ob_end_clean(); return $output_string; } 

Любая помощь или руководство будут высоко оценены, как если бы у меня были запрограммированные темы, прежде чем это вызвало у меня головную боль.

Solutions Collecting From Web of "Дата запроса в цепочке wordpress"

Вы хотите запросить сообщения с event_date в будущем, но вы сохранили (или, как кажется, из комментария), ваши даты:

 date("F", $unixtime)." ".date("d", $unixtime).", ".date("Y", $unixtime); 

Это «текстовое имя месяца» + «числовой день» + «числовой год». Невозможно запросить / отсортировать этот формат, чтобы он соответствовал календарю. Ваши варианты сортировки «в алфавитном порядке», которые, очевидно, будут ошибочными или «численными», что также явно неверно. Единственным форматом данных для чтения, который соответствует календарю, является «числовой год» + «числовой месяц» + «числовой день» или «ГГГГ-ММ-ДД». Выбор разделителя произволен и может быть ничем. Это date('Ym-d') . Если ваши даты были сохранены в рациональном формате, то следующий запрос должен сделать то, что вам нужно:

 $args = array( 'post_type' => 'events', 'orderby' => 'event_date', 'meta_key' => 'event_date', 'order' => 'ASC', 'meta_query' => array( array( 'key' => 'event_date', 'value' => date('Ym-d',time()), 'compare' => '>' ) ), ); $q = new WP_Query($args); var_dump($q->request); 

Вы всегда можете просто сохранить временную метку Unix. Эти сортировки также соответствуют календарному заказу. Затем вы форматировали дату на дисплее. Это мое предпочтение датам, если вы не сохраняете столбец формата «дата» в таблице MySQL. Если вы сохраняете как временную метку, используйте:

 'value' => strtotime('today'), 

вместо:

 'value' => date('Ym-d',time()), 

Это запросит / покажет все будущие posts – стандартный запрос WP, окруженный 2-мя фильтрами, 1, чтобы добавить фильтр, чтобы он применялся к этому запросу, а другой – для его удаления, чтобы он не применим к каким-либо другим запросам:

Это будет запрос для вашего настраиваемого цикла:

 add_filter( 'posts_where', 'filter_where' ); $events = new WP_Query(array('post_type' => 'post', 'posts_per_page' => -1, 'order' => 'ASC', 'orderby' => 'date', 'post_status' => array('publish', 'future'))); remove_filter( 'posts_where', 'filter_where' ); 

Добавьте это в свой файл функций для фильтра:

 function filter_where( $where = '' ) { global $wpdb; $where .= " AND ($wpdb->postmeta.meta_key = 'event_date' AND $wpdb->postmeta.meta_value >= '".date('Ym-d')."')"; return $where; } 

Эти 2 комбинации будут запрашивать все сообщения в дни и после дня, а затем заказывать их по дате. Это то, о чем вы говорите?