是否可以拥有如下页面: www.site.com/page /
并显示不同的模板版本,比如说:
www.site.com/page/?template=default
www.site.com/page/?template=archive
...
因此它检索相同的页面内容,但以不同的方式显示。
WordPress可以实现吗?它是标准的还是需要一些tomhackery才能做到这一点?
谢谢
答案 0 :(得分:3)
我刚回答了一个类似的问题。
Manually set template using PHP in WordPress
上面的答案应该有效,但是使用TEMPLATEPATH,我认为并不理想,它似乎也没有利用WordPress已经在做的选择模板。
function filter_page_template($template){
/* Lets see if 'template is set' */
if( isset($_GET['template']) ) {
/* If so, lets try to find the custom template passed as in the query string. */
$custom_template = locate_template( $_GET['template'] . '.php');
/* If the custom template was not found, keep the original template. */
$template = ( !empty($custom_template) ) ? $custom_template : $template;
}
return $template;
}
add_filter('page_template', 'filter_page_template');
这样做,您不需要为希望能够指定的每个模板添加新行。此外,您还可以利用现有的模板层次结构,并考虑输入不存在的模板的可能性。
我想指出你应该在使用它之前对$ _GET ['template']值进行一些验证,但是你也可能想要保持一个运行列表进行检查,这样他们就不能使用任何旧的模板。
答案 1 :(得分:2)
创建“主”模板并将其分配给您的页面。主模板不包含任何布局信息 - 只是一组条件包含语句,它们根据GET变量选择“真实”模板。主模板可能如下所示:
<?php
switch ($_GET["template"]) {
case "foo":
include(TEMPLATEPATH . "/foo.php");
break;
case "bar":
include(TEMPLATEPATH . "/bar.php");
break;
case "baz":
include(TEMPLATEPATH . "/baz.php");
break;
default:
include(TEMPLATEPATH . "/default_template.php");
break;
}
?>