get page templates

时间:2013-01-26 作者:Jamie

我有这个问题,我需要获得所有页面模板。我知道有很多方法可以根据他们的名字得到他们。我知道我可以包含一个页面模板,但我正在尝试将它们包含在索引页面的循环中。我刚刚安装了2012主题,修改了标题以包含我的脚本。我使用了Milo提供的一个功能,将所有帖子和页面加载到正在运行的主页中。现在,我需要包括所有模板,甚至那些我不知道其名称的模板。

在抄本中,我发现了一个函数get_page_templates() 这似乎不再有效了。它给出了这个片段

 <?php 
    $templates = get_page_templates();
    foreach ( $templates as $template_name => $template_filename ) {
    echo "$template_name ($template_filename)<br />";
    }
 ?>
此代码段本应完成此操作,但它给了我一个无效的函数错误。我把get\\u page\\u template()弄得一团糟,但它只会返回页面。php

查看\\u wp\\u post\\u meta中的数据库,我看到字段\\u wp\\u page\\u template,我可以看到它包含了我需要包含的所有模板名称。我只是不知道如何把这些名字从这个领域中去掉。

我试过这个

$template = get_post_meta($post->ID,\'_wp_page_template\',true);
但当我检查$模板的值时,我什么也没找到。

你能帮忙吗?

4 个回复
最合适的回答,由SO网友:brasofilo 整理而成

检查get_page_templates()core, 我找到了一种不会打破主题的解决方法,如:

致命错误:调用未定义的函数get\\u page\\u templates()

我刚用过这个<body> 工作正常:

$templates = wp_get_theme()->get_page_templates();

foreach ( $templates as $template_name => $template_filename ) 
{
    echo "$template_name ($template_filename)<br />";
}

SO网友:Wyck

codex中的示例不再有效,此代码在3.3到3.5之间的某个地方进行了更改。

另一种方法是使用以下内容。

$stylesheet = get_stylesheet();
$theme = wp_get_theme( $stylesheet );
// this will only return .php files extend as needed
$allowed_files = $theme->get_files( \'php\', 1 );

var_dump($allowed_files); // see what is there

SO网友:Jamie

我想出来了。这是我的解决方案。有更好的吗?结束后,我这样做了(我的所有模板都存储在inc文件夹中)

 <?php $args = array( \'meta_key\' => \'_wp_page_template\');
        $templates = get_pages($args);
        foreach ( $templates as $template){
            $templateName = $template->meta_value;
            if( $templateName != \'default\' && $templateName !=\'\') include(\'inc/\'. $templateName);
        } 

SO网友:Milo

这是一个有效的函数,您不能在前端使用它,因为theme.php 前端未加载文件,您必须将其包括在内-

include_once ABSPATH . \'wp-admin/includes/theme.php\';
$templates = get_page_templates();
但它并没有给你真正需要的东西,brasofilo和Wyck的答案很可能就是你想要的。

结束

相关推荐

Enable page templates. How?

基本问题,但我想启用页面模板。我有一个启用了页面模板的主题。我切换到了另一个模板,但没有更改模板的选项,即使在创建新页面时也是如此。如何打开此选项?我在抄本和论坛上找到了根,但找不到。