所以我有一个完美的活动循环,只显示未来的帖子。问题是,我希望在循环中保留不再是未来帖子的帖子一天。
实施例: 因此,如果活动(或预定的帖子)是在3日晚上8点。截至目前,它已于晚上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; ?>
答案 0 :(得分:3)
似乎WP_Query
的时间参数能够指定明确的时间跨度,但不能指定不确定的时间跨度,例如从现在到未来的帖子。 WordPress文档建议使用posts_where filter进行时间相关查询。所以你可以把它放在你的主题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('Y-m-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()
中定义返回任何对象functions.php
的自定义$loop
来清理它。是的。
答案 1 :(得分:1)
我看了一眼:http://codex.wordpress.org/Class_Reference/WP_Query
在页面下方有一个名为“时间参数”的部分。
我认为将来您不希望查找post_status,而是希望查找日期大于当前日期的帖子 - 1天。