Можно ли использовать get_template_part() с папками?

6 февр. 2013 г., 09:47:07
Просмотры: 34.4K
Голосов: 33

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

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

0
Все ответы на вопрос 3
3
52

На самом деле это возможно. У меня есть папка в директории темы под названием /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 в имени файла.

6 февр. 2013 г. 10:18:20
Комментарии

Спасибо! Это настолько просто, что даже стыдно, что я сам до этого не додумался. Я был уверен, что это невозможно, потому что в Codex об этом не упоминается. Этот вопрос получил много интересных ответов, но данный — самый простой, поэтому, вероятно, он будет наиболее полезен для обычного пользователя :) (так что пусть он будет отмечен зеленой галочкой).

Atadj Atadj
6 февр. 2013 г. 15:30:12

К счастью, Codex можно редактировать, так что следующий человек не столкнётся с той же проблемой. :-)

Dalton Rooney Dalton Rooney
13 февр. 2013 г. 19:34:32

@Sebastien На самом деле можно, например:

<?php get_template_part('partials/file'); ?>

HauntedSmores HauntedSmores
16 мая 2019 г. 02:00:53
2

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

Я изучил и функция 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;
}

Функция locate_template ищет php-файл, указанный в get_template_part. Но вы можете вызывать locate_template напрямую из своего кода. И это полезно.

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

locate_template( 'mydir/loop-single.php', true, true );
6 февр. 2013 г. 10:00:39
Комментарии

Интересный способ, интересно, есть ли у него негативные последствия для последовательности загрузки или содержимого файлов.

lowtechsun lowtechsun
30 сент. 2017 г. 03:42:10

get_template_part устанавливает $require_once в false не просто так - автор хочет использовать функцию для вызова переиспользуемых частей...

Isaac Lubow Isaac Lubow
2 июн. 2020 г. 10:06:11
0

В примечаниях к функции get_template_part() указано:

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

Что позволяет использовать locate_template(), в описании которой сказано:

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

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

6 февр. 2013 г. 09:58:32