Получить дату публикации поста в functions.php, чтобы создать новую мету поста для сложного цикла - PullRequest
0 голосов
/ 22 октября 2019

Резюме

Я работаю над страницей «События и новости» на веб-сайте клиента. На странице есть два раздела: раздел «Предстоящие события» и раздел «Новости и прошедшие события».

«События» и «Новости» - это отдельные типы сообщений. «События» использует настраиваемое поле «событие-дата» (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

  1. Извлеките поле «событие-дата» из типа записи «событие» и создайте новое мета-значение под названием «события-и-новости-дата», отформатированное в («Ymd»)
  2. Извлеките дату публикации из типа записи «пост»и создайте новое мета-значение с названием 'events-and-news-date', отформатированное в ('Ymd') *
  3. Добавьте поле 'events-and-news-date' при сохранении сообщения

В events-and-news.php (Шаблон страницы)

  1. Получить текущую дату в формате ('Ymd')
  2. Создать новый запрос для 'News'и 'События'
  3. Используйте мета-запрос, который извлекает поле 'events-and-news-date' и проверяет, является ли значение этого поля меньше или равно текущей дате
  4. Упорядочивает сообщения по значению 'events-and-news-date'
  5. Выводит сообщения

Код

В 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, который работает совершенно нормально, но я не могу получить дату публикации и добавить новое поле на основе значения даты.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...