将发布日期添加20年,然后查询

时间:2012-03-21 作者:Nathan

我想知道是否有人知道如何在一组帖子的日期戳上添加一个时间段(比如20年),然后在使用新日期的循环上运行查询?

基本上我想做的是有一系列正常的新闻帖子。除此之外,我还为“20年前的今天”定制了一个帖子类型,该日期的帖子在90年代初打上了适当的印章。我希望这些帖子与新闻帖子出现在同一个循环中(而不是单独的循环)。

所以可能会这样:

《新闻邮报》(2012年3月21日)《新闻邮报》(2012年3月19日)《20年前》(1992年3月17日)《新闻邮报》(2012年3月12日)《20年前》(1992年3月6日)等等。而任何发生在不到20年前(比如1993年)的事情,都会像一个待处理的帖子,不会出现。

如有任何建议,将不胜感激

1 个回复
SO网友:kaiser

例如,使用posts_where 滤器如果需要使用posts_clauses 过滤,然后交换$where 具有$pieces 和设置$pieces[\'where\'] .= 而不是$where .=. 把它放到你的函数中。php文件,并在查询帖子之前添加一些条件标记。

function filter_where( $where ) 
{
    // Add some conditionals and abort if they\'re not met:
    // @example Abort on pages
    if ( ! is_page() )
        return;

    // posts in the last 30 days
    // $where .= " AND post_date > \'".date( \'Y-m-d\', strtotime( \'-30 days\' ) )."\'";

    // posts  30 to 60 days old
    // $where .= " AND post_date >= \'".date( \'Y-m-d\', strtotime( \'-60 days\' ) )."\'"." AND post_date <= \'".date( \'Y-m-d\', strtotime( \'-30 days\' ) )."\'";

    // posts between 01.03.2012 and 21.03.2012
    $where .= " AND post_date >= \'2012-03-01\' AND post_date <= \'2012-03-21\'";

    return $where;
}
add_filter( \'posts_where\', \'filter_where\' );
<小时>Edit: 这是OP的原始循环:

<section id="content">
<?php 
query_posts( array( \'post_type\' => array( \'post\', \'twentyyearsago\' ) ) ); 
if ( have_posts() )
{
while ( have_posts() )
{
    the_post();

    if ( \'twentyyearsago\' === get_post_type() ) // FIX THIS: strict type checking with "==="
    {
    ?>
        <article class="twentyyears">
            <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="This day 20 years ago">This day 20 years ago</a></h2>
            <?php the_content(); ?>
            <footer><?php the_time( \'F j, Y\' );?></footer> // FIX THIS: One leading "<" in front of "<?php" too much
        </article>
    <?php } else { ?>
        <article class="post">
            <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
            <?php the_content(); ?>
            <footer><?php the_time( \'F j, Y\' ); ?></footer>
        </article>

    <?php 
    } // FIX THIS: one trailing ";" too much
} // endwhile;
else
{
    // do stuff
    echo "No Posts.";
} // endif; 
wp_reset_query(); 
?>
</section>

结束

相关推荐

在POST UPDATE/CREATE之后,在WP的后台运行cron作业(或类似作业

我想在帖子内容创建或更新后对其运行过滤器。我希望在用户提交帖子后发生这种情况,因为这可能是一个有点长的过程(查找/替换以搜索词汇表术语并将其替换为链接)。实现这一目标最有效、最可靠的方法是什么?提前感谢,