WP tricks: posts to the future
In a recent WordPress work, I had to publish, with an external PHP script, a lot of posts with wp_insert_post() function. These posts had a non common feature: the ‘post_status’ was ‘publish’ and the ‘post_date’ was in the future.
Normally, in WordPress, the posts with a date in the future have ‘post_status’ ‘future’ but, in this case, I couldn’t set it because the wordpress query shows in the frontend only published posts.
So the problem is that they don’t appear in any query because the WordPress query shows only posts with present date or before.
Add in your functions.php in the theme folder, or in hooks.php if you use Wordless, this function:
function show_posts_to_the_future($where = '') { $cut = "AND post_date <= '". date('Y-m-d', strtotime('now')) ."'";
$where = str_replace($cut, "", $where);
return $where;
}
removing the “WHERE post_date” condition into the query.
If you want a specific range in the future you can add this line:
$where .= " AND post_date < '" . date('Y-m-d', strtotime('+365 days')) . "'";
So you must override (in the same position) another function that launches the filter hooked by specific event:
function show_future($query) { add_filter('posts_where', 'show_posts_to_the_future'); }
For example, if you want to limit this query you can add an if condition before the add_filter. In my case it was only for backend and for a specific post_type:
if (is_admin() && ($query->query['post_type'] == 'book')){}
Now we must add an hook with an add_action():
add_action(‘pre_get_posts’, ‘show_future’);
This action hooks all queries.
So you can view the Posts to the Future!