如何在没有获得404的情况下使用if($wp_Query->Query_vars[‘name’]==‘ages atdontexist’)?如何压制404

时间:2013-09-04 作者:Doug Cassidy

如果我的url是/PageThatDontExist,我想做点什么,但我不想让wp发送404个标题。我试过这个:

add_action(\'wp\', array($this,\'awp\'));   
function awp(){
global $wp_query ;
debug($wp_query->is_404);
if($wp_query->query_vars[\'name\'] == \'pagethatdontexist\')
    debug(\'yes were at pagethatdontexist\');;
$wp_query->is_404 = false;
debug($wp_query->is_404);
}
虽然有效,但仍发送了404个标头。

我在哪里可以联系上,告诉wp不要发送404?

编辑——好吧,这似乎起到了作用,我不确定这是否符合犹太教。

function filter_status_header(  $status_header, $header, $text, $protocol ){
    global $wp_query;
    if (iDontWant404()){
        $wp_query->is_404 = false;// still sends 404 unless:
        return \'HTTP/1.1 200 OK\';  
    }
    else
        return $status_header;
}
add_filter(\'status_header\',array($this,\'filter_status_header\'),4,4);

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

您可以使用较早的操作,request, 做任何你需要的事。它允许您修改查询变量,甚至取消整个请求,而无需发出404错误:

function wpse112929_cancel_request_parsing( $query_vars ) {
    if ( in_array( \'pagethatdontexist\', $query_vars ) ) {
        return array();
    }

    return $query_vars;
}
add_action( \'request\', \'wpse112929_cancel_request_parsing\' );
我用过in_array() 这里不是直接比较,因为实际匹配取决于permalink结构。是的name 对于/%postname%/, category_name 对于/%category%/%postname%/, pagename 对于/%year%/%monthnum%/%postname%/, 等

您也可以检查$_SERVER[\'REQUEST_URI\'] 相反

SO网友:mircobabini

正如某人(某处)所说,不发送标题就进入404不是一个好主意。正确的做法是重定向到其他地方。

如果您属于404模板,那么404头将按原样逻辑发送。搜索引擎也会爱你的!

干杯

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post