在调用TEMPLATE_REDIRECT之前重写URL

时间:2015-08-22 作者:ptimson

Logic

<我有一个页面模板/blog 其中包含一个“公共”博客/members 这是会员区如果用户输入URL/members/blog 我想在template_redirect 连接并加载显示“私人”博客的自定义模板

Problem

之前template_redirect 被称为/members/blog 被重新写入/blog 所以我无法加载私人博客页面。

重写规则中没有规定要这样做。

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

所以问题是redirect_guess_404_permalink 正在检测404错误并“猜测”/members/blog 未来/blog

我的黑客解决方案是挂接状态错误检查(Stop Wordpress from "guessing" redirects for nonexistent URLs) 如果URL部分匹配,则取消设置猜测的解决方案

function blog_no_redirect_guess_404_permalink( $header ){
    global $wp_query;

    if( is_404() ) {
        // Get Request URL Parts
        $url = parse_url($_SERVER[\'REQUEST_URI\']);
        $path = explode(\'/\', $url[\'path\']);
        $path = array_filter($path);
        $path = array_merge($path, array());
        // If matches /members/blog then unset \'guess\'
        if (strtolower($path[0]) == \'members\' && strtolower($path[1]) == \'blog\') {
            unset( $wp_query->query_vars[\'name\'] );
        }
    }

    return $header;
}
add_filter( \'status_header\', \'blog_no_redirect_guess_404_permalink\' );

结束

相关推荐

Custom Post Templates

The Issue: 我正在寻找定制的单篇文章模板,以添加或删除单个元素作为普通单篇文章的功能。有很多方法可以在WordPress中为单个帖子创建自定义帖子模板。尤其是post格式是使用默认模板处理默认情况的绝佳机会;然而,我需要真正的自定义模板。The Idea: 我的第一种方法是根据post ID添加if/else语句:// check if custom post if ( is_single(\'999\') ) // check if there is a custom