使用多个模板显示页面内容 - WordPress

时间:2012-03-08 16:12:23

标签: php wordpress templates wordpress-theming

是否可以拥有如下页面: www.site.com/page /

并显示不同的模板版本,比如说:

www.site.com/page/?template=default

www.site.com/page/?template=archive

...

因此它检索相同的页面内容,但以不同的方式显示。

WordPress可以实现吗?它是标准的还是需要一些tomhackery才能做到这一点?

谢谢

2 个答案:

答案 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;
}
?>