If $var is empty, return 404.

时间:2014-04-01 作者:Mariano

出于安全原因,检测是否有人在操纵GET 我正在编写的插件的参数,我需要返回404 如果我执行的安全查询没有返回任何内容。我怎么能强迫呢?我尝试了:

if (security($_GET[\'id\'])) {
    [...]
} else {
    global $wp_query;
    $wp_query->set_404();
}
在其他帖子中找到,但不起作用。

1 个回复
SO网友:codearachnid

我遇到了使用$wp_query->set_404(); 将正确调整全局对象,但不会返回404模板。因此,在我编写的插件中,我使用了经过测试的方法:

add_filter( \'template_include\', \'wp_139917_force_404\' );
function wp_139917_force_404(){
    global $wp_query;
    $wp_query->set_404();
    status_header(404);
    include get_404_template();
    exit;
}
~修改自源:https://github.com/codearachnid/woocommerce-product-permalink/blob/master/inc/product-permalinks.php#L56

我还使用了另一种格式,我认为这种格式更干净,在适当的情况下应该加以利用:

add_filter( \'template_include\', \'wp_139917_sanity_force_404\' );
function wp_139917_sanity_force_404( $template ){
    // use your own sanity check logic to return the 404 template
    if( your_sanity_check_true_404() ) {
        global $wp_query;
        $wp_query->set_404();
        return get_404_template();
    } else {
        return $template;
    }
}

结束

相关推荐