在不向数据库中添加页面的情况下创建页面

时间:2012-01-01 作者:JasonDavis

我试图在我的主题中包含一个特殊的归档页面,现在我有一个带有

Template Name: Archives Template 在顶部和我,用户必须创建一个空白的存档帖子页面,然后选择此页面作为模板。

用于创建页面的内容为空,因此不会向数据库中添加任何页面内容。在他们不必这样做的地方,有没有办法做到这一点?

3 个回复
最合适的回答,由SO网友:Brian Fegter 整理而成

也就是说,从技术上讲,这不是一个“页面”,但它是一种使用mod\\u重写来显示内容的方法。这里的目标是添加foobar的URI段,该段将触发自定义查询,然后包括指定的模板文件。

添加重写规则:

add_action(\'init\', \'foo_add_rewrite_rule\');
function foo_add_rewrite_rule(){
    add_rewrite_rule(\'^foobar?\',\'index.php?is_foobar_page=1&post_type=custom_post_type\',\'top\');
    //Customize this query string - keep is_foobar_page=1 intact
}
请参见WP_Query documentation 有关自定义查询字符串的详细信息。

注册新的查询变量:

add_action(\'query_vars\',\'foo_set_query_var\');
function foo_set_query_var($vars) {
    array_push($vars, \'is_foobar_page\');
    return $vars;
}
强制WP选择页面模板:

add_filter(\'template_include\', \'foo_include_template\', 1000, 1);
function foo_include_template($template){
    if(get_query_var(\'is_foobar_page\')){
        $new_template = WP_CONTENT_DIR.\'/themes/your-theme/template-name.php\';
        if(file_exists($new_template))
            $template = $new_template;
    }
    return $template;
}
通过访问设置->永久链接刷新重写,然后访问http://yourdomain.com/foobar

SO网友:Denny

Brian Fegter回答的补充说明。如果要以编程方式刷新重写规则,而不是访问设置->永久链接,可以使用flush_rewrite_rules().

但是,不要戴上它init 正如Wordpress Codex强烈建议的那样。你可以把两者flush_rewrite_rules() 方法和foo_add_rewrite_rule() 在…上register_activation_hook.

register_activation_hook( __FILE__, \'myplugin_flush_rewrites\' );
function myplugin_flush_rewrites() {
add_rewrite_rule(\'^foobar?\',\'index.php?is_foobar_page=1&post_type=custom_post_type\',\'top\');
flush_rewrite_rules();
}

SO网友:Adam Christianson

我能够阻止is_front_page()is_home() 通过添加一个pre_get_posts 方法

add_action( \'pre_get_posts\', \'foo_pre_get_posts\', 1 );
function foo_pre_get_posts( $query ) {
    // check if the user is requesting an admin page 
    // or current query is not the main query
    if ( is_admin() || ! $query->is_main_query() ){
        return;
    }

    // edit the query only when we are dealing with our "fake" pages
    // if it isn\'t, return
    if ( get_query_var(\'is_foobar_page\') ) {
        $query->set(\'post_type\', \'page\');
        $query->is_home = false;
    }

}

结束

相关推荐

Way to create pages quickly

我有一个网站结构,我想创建一堆空白页面-每个页面都有一个特定的父页面和模板。有没有比一个接一个更快的方法?可能是插件?