如何在不重定向的情况下正确打印404错误?(即保留当前URL)

时间:2012-08-18 作者:Paul T.

我想通过打印404错误来隐藏BuddyPress安装中的一些页面。

借助以下问题:Redirect Restricted Page to 404我想出了以下代码:

global $wp_query;
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
页面的大部分都被很好地隐藏了,并且打印出了404错误,但是在此代码之前打印的内容仍然保留了下来(包括我想要隐藏的页面的标题)。

不幸的是,在打印任何内容之前,我无法将此代码向上移动。

那么有没有办法clear everything that has been printed before 然后print a fresh 404 error 但是有keeping the current URL? (因此没有重定向到404.php页面。)

1 个回复
最合适的回答,由SO网友:Milo 整理而成

您应该在模板之外使用筛选器:

add_filter( \'template_include\', \'wpa62226_template_include\', 1, 1 );
function wpa62226_template_include( $template ){
    if( is_page( \'some-page\' ) ) :
        global $wp_query;
        $wp_query->set_404();
        status_header( 404 );
        $template = locate_template( \'404.php\' );
    endif;
    return $template;
}
您的代码是在加载模板之前执行的,因此它不会成为问题。

结束