Есть ли способ использовать get_template_part () с папками?

26

Мне интересно, есть ли способ использовать get_template_part () с папками? В моей главной папке сейчас много файлов, потому что каждый элемент многократного использования помещается в отдельный файл. Я бы хотел поместить их в папки.

В Кодексе нет информации об этом: http://codex.wordpress.org/Function_Reference/get_template_part

Павел
источник

Ответы:

40

На самом деле вы можете, у меня есть папка в моем каталоге темы под названием /partials/в в этой папке у меня есть файлы , такие как latest-articles.php, latest-news.phpи latest-statements.phpя загрузить эти файлы , используя get_template_part()как:

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

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

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

Просто не забудьте опустить .phpиз имени файла.

Ахмад М
источник
Благодарность! Это так просто, что обидно, что я этого не обнаружил. Я был убежден, что это невозможно, потому что Кодекс не упоминает об этом. Этот вопрос принес более интересные ответы, но этот самый простой, поэтому он, вероятно, самый полезный для среднего человека :) (так что пусть он будет отмечен зеленой галочкой).
Пол
1
К счастью, можно редактировать Кодекс, чтобы у следующего человека не было такой же проблемы. :-)
Dalton
@Sebastien Вы можете на самом деле: <?php get_template_part('partials/file'); ?>
HauntedSmores
5

Боюсь, что нет. Если в кодексе нет того, что вы хотели бы знать, попробуйте перейти по ссылке на источник, посмотрите на код и постарайтесь справиться с этим.

Я посмотрел, и функция 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;
}

Поиск шаблонов поиска для php-файла, вызываемого из get_template_part. Но вы можете вызвать locate_template прямо из вашего кода. И это полезно.

Попробуйте этот код вместо функции get_template_part ('loop-sigle.php') (ваш файл находится в mydir внутри вашей темы):

locate_template( 'mydir/loop-single.php', true, true );
david.binda
источник
Интересный ярлык, мне интересно, есть ли у него какие-либо негативные последствия для последовательности загрузки или содержимого файла.
lowtechsun
2

Примечание функции get_template_part()говорит:

Примечания
- Использует: locate_template ()
- Использует: do_action () Вызывает действие get_template_part _ {$ slug}.

Который позволяет вам использовать locate_template(), который говорит:

Выполняет поиск в STYLESHEETPATH ​​перед TEMPLATEPATH, чтобы темы, которые наследуются от родительской темы, могли просто перегрузить один файл.

Если вы определили TEMPLATEPATHс подкаталогом, который вы хотите использовать, get_template_part()будет искать файлы в вашем подкаталоге.

Майк Мадерн
источник