显示从今天开始的帖子

时间:2011-02-25 作者:Andycap

如何显示从今天到将来的帖子列表?我实际使用的代码是:

<div id="news-loop">
<?php if (have_posts()) : ?>
                <?php query_posts(\'cat=4&showposts=6&orderby=date&order=DESC&post_status=future&post_status=published\'); while (have_posts()) : the_post(); ?>
                <p><?php the_time(\'j F, Y\') ?></p>
                <p><a  href="<?php the_permalink() ?>" ><?php the_title(); ?></a></p>
            </div>
            <?php endwhile; ?>
        <?php else : ?>
   <?php endif; ?>
这正确显示了该类别的所有帖子和未来帖子。

另一个问题是:由于我使用的是“post\\u status=future&;post\\u status=published”,因此我必须丢弃旧帖子,以避免它们被显示。

谢谢你的帮助!

3 个回复
最合适的回答,由SO网友:konus 整理而成

根据query_posts 您可以执行如下过滤功能:

function filter_where( $where = \'\' ) {
    // where post_date > today
    $where .= " AND post_date >= \'" . date(\'Y-m-d\') . "\'"; 
    return $where;
}
add_filter( \'posts_where\', \'filter_where\' );
然后你的query_posts 不需要有post_status

SO网友:Bainternet

第一次更改您查询的帖子(…)对此:

$args = array(
        \'cat\' => 4,
        \'posts_per_page\' => 6,
        \'orderby\' => \'date\',
        \'order\' => \'DESC\',
        \'post_status\' =>array(\'future\',\'published\'));
query_posts($args);
然后将此代码添加到主题的函数中。php文件

function my_filter_where( $where = \'\' ) {

    global $wp_query;

    if (is_array($wp_query->query_vars[\'post_status\'])){

        if (in_array(\'future\',$wp_query->query_vars[\'post_status\']){
        // posts today into the future
        $where .= " AND post_date > \'" . date(\'Y-m-d\', strtotime(\'now\')) . "\'";
        }
    }
    return $where;
}
add_filter( \'posts_where\', \'my_filter_where\' );
现在假设这是唯一一个包含未来帖子的查询,否则需要向查询中添加一个条件参数,并在filter函数中进行检查。

SO网友:kaiser

我不确定post_status=future&post_status=published 是预期的方式。我想这就像orderby=date whatever 只是用一个空格隔开。如果你让published 退出查询?我想这就是为什么你可能会提出旧的帖子。到目前为止,我得到的唯一想法是筛选出尚未发布的未来帖子,这是一个2步过程。以下内容未经测试,无法开箱即用。它应该让您知道在哪里查看$post对象,以及如何尽可能避免显示不适合您的查询的帖子。

$future_posts = query_posts( \'cat=4&showposts=6&orderby=date&order=DESC&post_status=future\' );
if ( $future_posts->have_posts() ) :
  while ( $future_posts->have_posts()) : 
    $future_posts->the_post();

    if ( $post[\'post_status\'] !== \'published\' ) :
       // do stuff
    endif;

  endwhile;
endif;

结束

相关推荐