编辑自定义模板选择器

时间:2016-06-07 10:11:17

标签: wordpress

我尝试在目录和子目录上组织自定义页面模板,但我不能让wordpress识别它们。

我已经有了一个递归函数来获取关联数组,模板路径作为键,模板名称作为值,并修改wp缓存,页面模板选择器捕获它们,但是当页面被保存时,post meta包含其他模板;(

获取模板功能

function get_custom_templates($path = null, $templates = array()) {
    $parent = "";
    if (is_null($path))
        $path = get_stylesheet_directory() . "/custom_templates";
    else 
        $parent = basename($path);

    foreach (scandir($path) as $item) {
        if (substr($item, 0, 1) == ".") continue;

        $template = $path . "/" . $item;
        if (is_dir($template)) {
            $templates = array_merge($templates, get_custom_templates($template, $templates));
        } else {
            $templates[$template] = $parent . "-" . basename($template, ".php");
        }
    }

    return $templates;
}

将它们添加到编辑

function include_custom_templates($atts) {
    $cache_key = "page_templates-" . md5(get_theme_root() . "/" . get_stylesheet());

    $templates = wp_get_theme()->get_page_templates();
    if (empty($templates))
        $templates = array();

    wp_cache_delete($cache_key, "themes");
    $templates = array_merge($templates, get_custom_templates());
    wp_cache_add($cache_key, $templates, "themes", 1800);

    return $attrs;
}

add_filter("page_attributes_dropdown_pages_args", "include_custom_templates");
add_filter("wp_insert_post_data", "include_custom_templates");

1 个答案:

答案 0 :(得分:0)

来自Page Templates

  

WordPress识别子文件夹页面模板。因此,最好将全局页面模板存储在此文件夹中,以帮助保持它们的有序性。

WP 3.4以来就是这样。

所以我的建议是将它们放在主题的/page-templates子目录中,而不是/custom_templates。这样,您就可以立即识别出WordPress。