如果页面不存在,是否包括不同的页面?

时间:2011-03-08 作者:Rob Williams

我正在为一个客户建立一个网站,他们需要几个不同的部分,如:

Regular Site (/)
  - Section 1 (/section_1/)
  - Section 2 (/section_2/)
     ... 
  - Section X
常规站点将包含所有主要内容,但我希望能够覆盖指定部分中存在的某些页面。

假设用户访问domain.com/section_1/features. 如果a/section_1/features 页面存在,我想显示它;但是,如果该页面不存在,我希望它显示/features without 重定向或更改地址栏中的URL。它应该是完全无缝的和幕后的。

think 我需要向parse_request hook,类似于:

function check_section_page( &$wp ) {
    $requested_path = $wp->request;

    if ( ! get_page_by_path($requested_path) ) {
        $new_requested_path = preg_replace("/^(.*?)\\//", "", $requested_path);
        // do something here to make it read $new_requested_path
    }
}

add_filter("parse_request", "check_section_page");
它正确运行该函数,并且回显$new\\u requested\\u path表明它确实具有新的必需页面。我已经为此挣扎了大约2个小时,我的脑袋都快晕过去了。帮助

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

我设法解决了这个问题。以下是如何做到这一点,以防其他人需要此解决方案。

**美国东部时间3月10日凌晨3:30更新**

我在这里使用的前一个函数正确显示了页面,但返回了404错误代码。我已经用一个不返回404的工作示例替换了错误的代码示例。

function check_section_page( $posts ) {

    if (is_admin()) { return $posts; }

    global $wp, $wp_query;

    $requested_path = $wp->request;

    if ( $requested_path == "" ) { return $posts; }

    preg_match("/^([a-z\\-]+)\\//", $requested_path, $matches);

    if ( count($matches) > 1 ) {
        if ( get_page_by_path( $matches[1] ) ) { $section = $matches[1]; }
    }

    $wp_query->set("saleslink_section", $section);

    $this_page = get_page_by_path( $requested_path );
    $new_requested_path = preg_replace("/^(.*?)\\//", "", $requested_path);
    $requested_page = get_page_by_path($new_requested_path);

    if ( $requested_page->ID and ! $this_page->ID ) {

        $posts = NULL;

        $posts[] = $requested_page;
        $wp_query->is_page = true;
        $wp_query->is_singular = true;
        $wp_query->is_home = false;
        $wp_query->is_archive = false;
        $wp_query->is_category = false;
        unset($wp_query->query["error"]);
        $wp_query->query_vars["error"]="";
        $wp_query->is_404=false;

    }

    return $posts;

}

remove_filter(\'template_redirect\',\'redirect_canonical\');
add_filter("the_posts", "check_section_page");
Theremove_filter 当请求的url不存在而类似的url存在并且重定向到类似的url时,line将关闭Wordpress的自动url猜测重定向行为。

结束

相关推荐

Subdomain redirect problem

Wordpress已安装到我的根目录(/根/)。我有一个子域名(dammani.techbrij.com),我想从子域名访问主域名的一些文件。我做了以下事情:include_once(\'/root/wp-config.php\'); include_once(\'/root/wp-load.php\'); include_once(\'/root/wp-includes/wp-db.php\'); 现在,“http://techbrij.com/dammani“工作正常,但是”