﻿id,summary,reporter,owner,description,type,status,priority,milestone,component,version,severity,resolution,keywords,cc
2996,Content-managed error pages (particularly for 404 errors),wnicholls,anonymous,"What I mean is probably best shown by example.

Say I have a site where Wordpress is installed in the root, acting primarily as a CMS, not as a blog site (although actually this really has no bearing on this request). Or IOW its primary purpose is to serve pages, not posts.

For illustration I also have a subdirectory '''/nonwp''' (under the root) which contains static HTML files not managed by Wordpress (this works because the .htaccess rewrite rules test for file/directories that exist before passing to index.php)

The site's home page http://mysite/ is a page, not a list of posts, thus using the new feature of #2515 to set a front page thus:

{{{
  get_option('show_on_front') == 'page'
  get_option('page_on_front') == '/home' (well, the page id of it)
  get_option('page_for_posts') == '/blog' (page id again)
}}}

So depending on the URL visited:
{{{
  http://mysite/                  -> the ""front"" page 
  http://mysite/home/             -> also the ""front"" page (identical
  http://mysite/about/            -> another page  
  http://mysite/blog/             ->  posts page
  http://mysite/nonwp/index.html  -> these files actually exist, so the .htaccess  rewrite rules don't pass on to wordpress
}}}

But what about these URLs?
{{{
  http://mysite/thisdoesnotexist/
  http://mysite/about/notexist/
  http://mysite/nonwp/notexist.html
}}}

As it stands these will all display POSTS. This is highly undesirable. I want it to show some kind of '404' page.  At worst it should show the 'front' page as per #2515

The administration side of this would be pretty simple - add get_option( 'page_for_bad_url' ) == page id, or something (this could be the posts page, could be the front page, could be 'none'.  With the appropriate editing in '''wp-admin/options_reading.php'''.

The engine side is a bit harder. The code in '''query.php''' is pretty hairy, and I can't work out exactly how to patch this, someone with familiarity of the code might be able to suggest. 

I was thinking something along these lines ..
{{{
$request = "" SELECT ... FROM $wpdb->posts ..."";
...
$this->posts = $wpdb->get_results($this->request);
if( count($this->posts) == 0 and get_option('404_page') )
{
   page_id = get_option('404_page')
   go back and try querying again
}
}}}
Of course it isn't quite that simple

",enhancement,closed,normal,,Administration,,normal,wontfix,,
