Hi I'm type to make a plugin which shows a page instead of sending a 404 page when on a page that doesn't exist
I know I can edit to 404.php file to do this but i need to fit this in a plugin.
If I remove the if statement then its works on all pages which isn't what I want.
So i put the if(is_404()) statement in but it doesn't seem to work at all now...
function da_404_redirect()
{
if(is_404())
{
query_posts('page_id=2');
status_header( "200" );
}
}
add_action('init','da_404_redirect');
To redirect, don't hook on init
, especially if you use conditional tag like is_404(). Any conditional tag will still return false
in init
.
USE: template_redirect
instead or pre_get_post
if you need to change something on the WP_Query
Your action hook may be too soon in the wordpress cycle to know if it is a 404. http://codex.wordpress.org/Plugin_API/Action_Reference/init. Try using a later action hook.
As Nick says above you might be hooking into a late-firing event. In my experience, template_redirect is the best option.