Поэтому у меня есть цикл, который отлично подходит для событий и показывает только будущие сообщения. Проблема в том, что я хотел бы сохранить сообщения, которые больше не являются будущими сообщениями в цикле в течение дополнительного дня.
Пример: Итак, если событие (или сообщение, которое запланировано), находится на 8 вечера на 3-м. На данный момент он удаляется в 8 вечера (это проблема, потому что она может продолжаться 4 часа).
Я бы хотел, чтобы сообщения оставались в течение дополнительного дня или времени, которое я мог бы изменить.
Вот мой текущий код:
<?php $args = array( 'post_type' => 'event', 'posts_per_page' => 50, 'post_status' => 'future', 'order' => 'ASC' ); $loop = new WP_Query( $args ); if ( have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post();?> <div class="teaser-event <?php the_field('highlight') ?>"> <div class="event-meta gold"> <div class="event-date"><?php the_time('M d'); ?></div> <div class="event-time"><?php the_time('g:i A'); ?></div> </div> <div class="event-title"> <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"> <?php the_title(); ?> </a> </div> </div> <?php endwhile; else: ?> <p><?php _e('Sorry, no posts matched your criteria.'); ?></p> <?php endif; ?>
Похоже, что параметры времени для WP_Query
могут указывать определенные промежутки времени, но не неопределенные, например, сообщения отныне в будущем. Документы WordPress рекомендуют использовать фильтр posts_where для временных запросов. Поэтому вы можете поместить это в functions.php
вашей темы:
// Create a new filtering function that will add our where clause to the query function filter_where($where = '') { // posts from yesterday into the future $where .= ' AND post_date >= "' . date('Ym-d', strtotime('-1 day')) . '"'; return $where; }
И в вашем коде выше вы можете сделать:
$args = array('post_type' => 'event', 'posts_per_page' => 50, 'order' => 'ASC'); add_filter('posts_where', 'filter_where'); $loop = new WP_Query($args); remove_filter('posts_where', 'filter_where'); if ( have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post();
Фильтр добавления и удаления не делает это самым изящным решением, поэтому вы, вероятно, можете его очистить, function get_recent_and_future_posts()
пользовательскую function get_recent_and_future_posts()
в function get_recent_and_future_posts()
вашей темы, которая возвращает любой $loop
объекта.
Я посмотрел: http://codex.wordpress.org/Class_Reference/WP_Query
Вниз на странице есть раздел «Параметры времени».
Я думаю, вместо того, чтобы искать post_status в будущем, вы хотите искать сообщения с датой, большей, чем текущая дата, – 1 день.