Чи є спосіб використання get_template_part () з папками?


26

Мені цікаво, чи є спосіб використання get_template_part () з папками? У моїй головній папці зараз багато файлів, тому що я розміщую кожен повторно використовуваний елемент в окремому файлі. Тоді я хотів би помістити їх у папки.

Про це немає в Codex інформації: 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з імені файлу.


Спасибі! Це так просто, що шкода, що я цього не виявив. Я був переконаний, що це неможливо, оскільки Codex цього не згадує. Це питання дало цікавіші відповіді, але цей найпростіший, тому, мабуть, найкорисніший середній людині :) (тому нехай він буде позначений зеленим галочкою).
Павло

1
На щастя, можна редагувати Codex, щоб наступна людина не матиме такої ж проблеми. :-)
Далтон

@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 );

Цікавий ярлик, мені цікаво, чи має це негативні наслідки для послідовності завантаження або вмісту файлу.
lowtechsun

2

Нотатки функції get_template_part()говорять:

Примітки
- Використання: locate_template ()
- Використовує: dogery () Викликає дію get_template_part _ {$ slug} '.

Що дозволяє вам скористатися locate_template(), що говорить:

Пошук у STYLESHEETPATH ​​перед TEMPLATEPATH, щоб теми, які успадковуються від батьківської теми, можуть просто перевантажити один файл.

Якщо ви визначитеся TEMPLATEPATHз підкаталогом, який ви хочете використовувати, get_template_part()буде шукати файли у вашому підкаталозі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.