问题描述

我想知道有没有办法用文件夹使用 get_template_part()?我的主文件夹现在有很多文件,因为我把每个 re-usable 元素放在一个单独的文件中。我想把它们放在文件夹中。

没有关于食品法典的信息:http://codex.wordpress.org/Function_Reference/get_template_part

最佳解决方案

其实你可以,我有一个文件夹在我的主题目录/partials/在那个文件夹我有文件如 latest-articles.phplatest-news.phplatest-statements.php 和我加载这些文件使用 get_template_part()像:

get_template_part('partials/latest', 'news');

get_template_part('partials/latest', 'articles');

get_template_part('partials/latest', 'statements');

不要忘了从文件名中省略.php

次佳解决方案

恐怕不是。如果在 codex 中不是您想要知道的内容,请尝试遵循源代码链接,并查看代码,并尝试管理它。

我看了一下,get_template_part 功能定义如下:

function get_template_part( $slug, $name = null ) {
    do_action( "get_template_part_{$slug}", $slug, $name );

    $templates = array();
    if ( isset($name) )
        $templates[] = "{$slug}-{$name}.php";

    $templates[] = "{$slug}.php";

    locate_template($templates, true, false);
}

从中可以看出,get_template_part 功能只是创建一个预期的 php 文件名,并调用函数 locate_template 。这没有用,所以我也看了一下 locate_template 的功能:

function locate_template($template_names, $load = false, $require_once = true ) {
    $located = '';
    foreach ( (array) $template_names as $template_name ) {
        if ( !$template_name )
            continue;
        if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
            $located = STYLESHEETPATH . '/' . $template_name;
            break;
        } else if ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
            $located = TEMPLATEPATH . '/' . $template_name;
            break;
        }
    }

    if ( $load && '' != $located )
        load_template( $located, $require_once );

    return $located;
}

找到从 get_template_part 调用的 php 文件的定位模板搜索。但是你可以直接从你的代码中调用 locate_template 。这是有用的。

尝试这个代码,而不是 get_template_part(‘loop-sigle.php’) 函数 (您的文件位于您的主题中的 mydir):

locate_template( 'mydir/loop-single.php', true, true );

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。