我试图在我的主题中包含一个特殊的归档页面,现在我有一个带有
Template Name: Archives Template
在顶部和我,用户必须创建一个空白的存档帖子页面,然后选择此页面作为模板。
用于创建页面的内容为空,因此不会向数据库中添加任何页面内容。在他们不必这样做的地方,有没有办法做到这一点?
我试图在我的主题中包含一个特殊的归档页面,现在我有一个带有
Template Name: Archives Template
在顶部和我,用户必须创建一个空白的存档帖子页面,然后选择此页面作为模板。
用于创建页面的内容为空,因此不会向数据库中添加任何页面内容。在他们不必这样做的地方,有没有办法做到这一点?
也就是说,从技术上讲,这不是一个“页面”,但它是一种使用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/foobarBrian 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();
}
我能够阻止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;
}
}
我有一个网站结构,我想创建一堆空白页面-每个页面都有一个特定的父页面和模板。有没有比一个接一个更快的方法?可能是插件?