I have a very strange problem and I am stuck. I want the single page to display posts with the post_status of publish and future. So I added this code to my functions.php in my theme:
function display_future_posts() { global $wp_query; if( !is_admin() && $wp_query->is_main_query() && $wp_query->is_single()) { $wp_query->set( 'post_status', array('future', 'publish', 'draft') ); } } add_action('pre_get_posts', 'display_future_posts'); This successfully changes the query. But I still see a 404 page when I'm not logged in as admin. So I traced the db queries. Here is what I found when calling print_r($wpdb->queries); :
[16] => Array ( [0] => SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND ( ( YEAR( post_date ) = 2014 AND MONTH( post_date ) = 9 ) ) AND wp_posts.post_name = 'my-life' AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future') ORDER BY wp_posts.post_date DESC [1] => 0.000303030014038 [2] => require('wp-blog-header.php'), wp, WP->main, WP->query_posts, WP_Query->query, WP_Query->get_posts ) [17] => Array ( [0] => SELECT post_id FROM wp_postmeta, wp_posts WHERE ID = post_id AND post_type = 'post' AND meta_key = '_wp_old_slug' AND meta_value = 'my-life' AND YEAR(post_date) = 2014 AND MONTH(post_date) = 9 [1] => 0.000878095626831 [2] => require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), do_action('template_redirect'), call_user_func_array, wp_old_slug_redirect ) [18] => Array ( [0] => SELECT ID FROM wp_posts WHERE post_name LIKE 'my-life%' AND post_type IN ('post', 'page', 'attachment') AND YEAR(post_date) = 2014 AND MONTH(post_date) = 9 AND post_status = 'publish' [1] => 0.00031304359436 [2] => require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), do_action('template_redirect'), call_user_func_array, redirect_canonical, redirect_guess_404_permalink ) So my query is executed, but then the function wp_old_slug_redirect() in wp-includes/query.php is called and there the function is_404() returns true. So Wordpress tries to find an old slug (which of course doesn't exist), fails and then redirects to 404.
When I call print_r($wp_query); in the header.php of my theme it seems like the query was successfully modified, but strangely doesn't return any results. At least [posts] is empty. When I run [request] directly on my MySQL server I get exactly the result I'm looking for.
WP_Query Object ( [query] => Array ( [page] => [year] => 2014 [monthnum] => 09 [name] => my-life ) [query_vars] => Array ( [page] => 0 [year] => 2014 [monthnum] => 9 [name] => my-life [error] => [m] => [p] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [static] => [pagename] => [page_id] => 0 [second] => [minute] => [hour] => [day] => 0 [w] => 0 [category_name] => [tag] => [cat] => [tag_id] => [author] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [fields] => [menu_order] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [post_parent__in] => Array ( ) [post_parent__not_in] => Array ( ) [author__in] => Array ( ) [author__not_in] => Array ( ) [meta_query] => Array ( ) [post_status] => Array ( [0] => future [1] => publish ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [post_type] => [posts_per_page] => 7 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC ) [tax_query] => [meta_query] => WP_Meta_Query Object ( [queries] => Array ( ) [relation] => ) [date_query] => [request] => SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND ( ( YEAR( post_date ) = 2014 AND MONTH( post_date ) = 9 ) ) AND wp_posts.post_name = 'my-life' AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'future') ORDER BY wp_posts.post_date DESC [posts] => Array ( ) [post_count] => 0 [current_post] => -1 [in_the_loop] => [comment_count] => 0 [current_comment] => -1 [found_posts] => 1 [max_num_pages] => 0 [max_num_comment_pages] => 0 [is_single] => [is_preview] => [is_page] => [is_archive] => [is_date] => [is_year] => [is_month] => [is_day] => [is_time] => [is_author] => [is_category] => [is_tag] => [is_tax] => [is_search] => [is_feed] => [is_comment_feed] => [is_trackback] => [is_home] => [is_404] => 1 [is_comments_popup] => [is_paged] => [is_admin] => [is_attachment] => [is_singular] => [is_robots] => [is_posts_page] => [is_post_type_archive] => [query_vars_hash] => 7ce0208af83c782976286abc2d021484 [query_vars_changed] => 1 [thumbnails_cached] => [stopwords:WP_Query:private] => ) I'm out of wit. What am I doing wrong? What am I missing.
I hope this question isn't too specific and it is helpful for someone else out there.
Thanks! Ole