Резюме
Я работаю над страницей «События и новости» на веб-сайте клиента. На странице есть два раздела: раздел «Предстоящие события» и раздел «Новости и прошедшие события».
«События» и «Новости» - это отдельные типы сообщений. «События» использует настраиваемое поле «событие-дата» (ACF) для отображения его в разделе «Предстоящие события» или «Новости и прошедшие события», в то время как тип публикации «Новости» использует стандартную дату публикации.
Раздел «Предстоящие события» запущен и работает должным образом, но у меня гораздо больше проблем с разделом «Новости и прошедшие события».
Необходимость «Прошлые события» и «Новости»запрашиваться в том же цикле, но в порядке убывания, основываясь на том, когда произошло событие или когда была опубликована запись.
Пример
- Сообщение: опубликовано 10/22/2019
- Событие: состоялось 10/16/2019
- Событие: состоялось 10/12 /2019
- Сообщение: Опубликовано: 09/16/2019
- Сообщение: Опубликовано: 08/08/2019
- Событие: проведено 7/23/2019
- Сообщение: опубликовано 07/11 / 2019
- Сообщение: опубликовано 06/29/2019
План
Я никогда не имел дело с таким циклом, и подумал, что было бы разумнее сделать следующее.
В functions.php
- Извлеките поле «событие-дата» из типа записи «событие» и создайте новое мета-значение под названием «события-и-новости-дата», отформатированное в («Ymd»)
- Извлеките дату публикации из типа записи «пост»и создайте новое мета-значение с названием 'events-and-news-date', отформатированное в ('Ymd') *
- Добавьте поле 'events-and-news-date' при сохранении сообщения
В events-and-news.php (Шаблон страницы)
- Получить текущую дату в формате ('Ymd')
- Создать новый запрос для 'News'и 'События'
- Используйте мета-запрос, который извлекает поле 'events-and-news-date' и проверяет, является ли значение этого поля меньше или равно текущей дате
- Упорядочивает сообщения по значению 'events-and-news-date'
- Выводит сообщения
Код
В functions.php
<?php
function eventsAndNewsMeta ( $post_id ) {
if ( get_post_type( $post_id ) == 'event' ) {
$eventDate = get_post_meta( $post_id, 'event-date', true );
if( $eventDate ) {
add_post_meta( $post_id, 'events-and-news-date', $eventDate );
}
} else if ( get_post_type( $post_id ) == 'post' ) {
$publishDate = get_the_date( 'Ymd', $post_id );
if ( $publishDate ) {
add_post_meta( $post_id, 'events-and-news-date', $publishDate );
}
} else {
}
}
add_action( 'save_post', 'eventsAndNewsMeta', 100, 2);
В events-and-news.php (Шаблон страницы)
<?php
$currentDate = current_time('Ymd');
$args = array(
'post_type' => array(
'post',
'event',
),
'meta_query' => array(
array(
'key' => 'events-and-news-date',
'compare' => '<=',
'value' => $currentDate,
)
),
'meta_key' => 'events-and-news-date',
'posts_per_page' => '8',
'order' => 'DESC',
'orderby' => 'meta_value',
);
$loop = new WP_Query($args);
if ( $loop->have_posts() ) :
while ( $loop->have_posts() ) : $loop->the_post();
// The post
endwhile;
else :
// No news or past events
endif;
Я пытался найти любую информацию по этому поводу. Я протестировал добавление нового мета-поля к типу поста post, который работает совершенно нормально, но я не могу получить дату публикации и добавить новое поле на основе значения даты.
Я также хотел быть как можно более подробным, поскольку я никогда не создавал такой цикл, и не уверен, есть ли более эффективный способ выполнить то, чего я пытаюсь достичь.