模板层次结构标记-{slug}.php目录

时间:2015-08-03 作者:Horyun

什么时候tag-{slug}.php 是主题的根源,比如说wp-content/themes/p2/tag-{slug}.php, 遵守模板层次结构。

然而,我有许多这样的自定义文件,只是无法将其放在主题根目录中。当我测试时p2/tagp2/custom-tag 目录,它不起作用。

有什么见解吗?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

当您查看源代码时,标记模板将按照以下方式加载到模板层次结构中

  • elseif ( is_tag() && $template = get_tag_template() ) : 在里面wp-includes/template-loader.php

  • get_tag_template() 使用get_query_template() 其中使用locate_template()

    根据主题根文件夹的层次结构加载标记模板

    因此,将模板移动到子文件夹将不会立即生效。get_query_template() 但是要有一个过滤器(apply_filters( "{$type}_template", $template ))可以用来更改此行为并加载tag-{$tag->slug}.php 从子文件夹

    因此,我们应该做以下工作

    检查我们的tag-{$tag->slug}.php 存在于我们选择的子文件夹中

    加载我们的tag-{$tag->slug}.php 来自子文件夹(如果存在)

    如果出现以下情况,请从层次结构中加载默认模板tag-{$tag->slug}.php 子文件夹中不存在

以下类似的操作将起作用

add_filter( \'tag_template\', function ( $template )
{
    $tag = get_queried_object();
    // Alternative path to desired template
    $alternative_template = locate_template( "custom-sub-folder/tag-{$tag->slug}.php" ); // Change subfolder name

    // If we do have "tag-{$tag->slug}.php" in a subfolder, load "subfolder/tag-{$tag->slug}.php"
    if (  $alternative_template )
        return $template = $alternative_template;

    // If we don\'t have a "tag-{$tag->slug}.php", load templates according to hierarchy
    return $template;
});

结束

相关推荐

PHP帮助GET_TEMPLATE_DIRECTORY+PHP包含

抱歉,我的PHP技能不足。我想在WP中使用php include,但我想使用<?php get_template_directory(); ?>我不知道那会是什么样子。我的非WP文件如下所示:<?php include \'inc/social.php\'; ?> 基本上我不知道如何将两个PHP命令串在一起get_template_directory + 包括