我遇到了使用$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;
}
}