【问题标题】:Display page content using multiple templates - WordPress使用多个模板显示页面内容 - WordPress
【发布时间】:2012-03-08 16:12:23
【问题描述】:

是否可以有这样的页面:www.site.com/page/

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

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

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

...?

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

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

谢谢

【问题讨论】:

标签: php wordpress templates wordpress-theming


【解决方案1】:

我刚才回答了一个类似的问题。

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'] 值之前对其进行一些验证,而且您可能希望保留一个运行列表以进行检查,这样他们就不能简单地使用任何旧的模板。

【讨论】:

    【解决方案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;
    }
    ?>
    

    【讨论】:

    • 嗨,加布。是的,这也是我的想法。我以前这样做过,但以防万一我这样做有点傻。谢谢你的安慰:)
    • 感谢您接受这一点——我已经删除了我最初的错误答案并更好地拼出了正确的版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多