前一周帖子的RSS订阅源

时间:2015-07-17 作者:Iurie

如果可能的话,如何获取前一周帖子的RSS提要?

我从@Bainternet找到了一个解决方案(参见1, 2), 但我不知道如何在我的情况下实施它。

现在我可以显示前一周的帖子(参见下面的代码,改编自wpbeginner.com), 但我也需要一个feed链接。

// Display previous week’s posts
add_shortcode(\'lastweek\', \'wpb_last_week_posts\');

function wpb_last_week_posts() {
  ob_start();
    $thisweek = date(\'W\');
    if ($thisweek != 1) :
        $lastweek = $thisweek - 1;   
    else : 
        $lastweek = 52;
    endif; 
    $year = date(\'Y\');
    if ($lastweek != 52) :
        $year = date(\'Y\');
    else: 
        $year = date(\'Y\') -1; 
    endif;
    $the_query = new WP_Query( \'year=\' . $year . \'&w=\' . $lastweek .  \'posts_per_page=5\' );
    if ( $the_query->have_posts() ) : 
        while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <h2><a href="<?php the_permalink(); ?>" title="Permanent link to <?php the_title(); ?> "><?php the_title(); ?></a></h2>
            <?php the_excerpt(); ?>
        <?php endwhile; ?>
        <?php wp_reset_postdata(); ?>
    <?php else:  ?>
        <!-- Display recent posts if no posts in the previous week -->
        <ul><?php $the_query = new WP_Query( \'posts_per_page=5\' ); ?>
            <?php while ($the_query -> have_posts()) : $the_query -> the_post(); ?>
            <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
                <?php the_excerpt(); ?>
            <?php endwhile;
                wp_reset_postdata();
            ?>
        </ul>

    <?php endif;
  $output = ob_get_contents();
  ob_end_clean();
  return $output;
}

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

您可以尝试通过以下方式直接修改提要查询:

/**
 * Modify the main feed query to show posts from the previous week, 
 * when the GET parameter wpse_previous_week is set
 *
 * @link http://wordpress.stackexchange.com/a/194843/26350
 */
add_action( \'pre_get_posts\', function( $q )
{
    if(    $q->is_feed() 
        && filter_input( INPUT_GET, \'wpse_previous_week\', FILTER_SANITIZE_NUMBER_INT ) 
    )
        $q->set( \'date_query\', 
            [
                [ 
                    \'before\'    => \'Sunday previous week\', 
                    \'after\'     => \'Monday previous week\',
                    \'inclusive\' => true 
                ]
            ] 
        );
} ); 
并通过以下方式查看提要:

example.tld/feed/?wpse_previous_week=1
请注意,您可能需要测试和修改日期字符串,以更好地满足您的需要

结束

相关推荐

如何删除或替换默认的RSS2模板?

我正在尝试添加自定义的RSS2模板,但无法停用当前的RSS2提要。删除do\\u feed\\u rss2操作似乎不起作用。我复制了feed-rss2。php到我的主题文件夹并对其进行了修改。但我没有成功删除默认的RSS2模板。remove_all_actions( \'do_feed_rss2\' ); add_action( \'do_feed_rss2\', function( $for_comments ) { if ( $for_comments )