I’d like my archive.php page’s daily view (is_day) to display scheduled posts (post_status=future). For example, if I go to mysite.com/2011/05/20 I would see all posts scheduled to appear on May 20.
The archive page’s loop starts with:
if ( have_posts() )
the_post();
and ends with:
rewind_posts();
get_template_part( 'loop', 'archive' );
Do I need to make a second loop, or can I modify this single loop to show scheduled posts? If so, how? Thank you.
1 Answer
Keep things simple – leave your archive templates alone and place this in your functions.php
;
add_action( 'pre_get_posts', function ( $wp_query ) {
global $wp_post_statuses;
if (
! empty( $wp_post_statuses['future'] ) &&
! is_admin() &&
$wp_query->is_main_query() && (
$wp_query->is_date() ||
$wp_query->is_single()
)
) {
$wp_post_statuses['future']->public = true;
}
});
Essentially, it says;
If we’re on a date archive, or viewing a single post, make future posts publicly visible.
As a result, WordPress behaves normally when you view archives for any given date, except now it also includes posts ‘from the future’!.