Шаблон страницы в двухуровневой папке

Можно ли разрешить WordPress читать шаблоны страниц в файлах .php , которые находятся на двух уровнях глубоко внутри папки темы? < /p>

Пример:

theme/   folder-1/       child-folder-1/my-template.php

В настоящее время шаблон можно прочитать только в том случае, если он находится на том же уровне родительской папки.

Пример:

theme/   folder-1/   child-folder-1/my-template.php
<

Ответы и комментарии:

WordPress будет выполнять поиск только на один уровень глубины (см. Ниже подробности) в корневом каталоге темы для шаблонов страниц (и сообщений).
Однако массив шаблонов можно отфильтровать с помощью фильтра темы _ {$ post_type} _templates, так что вы можете добавить глубоко вложенные шаблоны самостоятельно:
// Смотрите WP_Theme :: get_page_templates
/ **
 * Фильтрует список шаблонов страниц для темы.
 *
 * Динамическая часть имени ловушки `$ post_type` относится к типу записи.
 *
 * @since 3.9.0
 * @since 4.4.0 Преобразован, чтобы обеспечить полный контроль над массивом `$ page_templates`.
 * @since 4.7.0 Добавлен параметр `$ post_type`.
 *
 * @param array $ post_templates Массив шаблонов страниц. Ключи - это имена файлов,
 * значения являются переведенными именами.
 * @param WP_Theme $ this Объект темы.
 * @param WP_Post | null $ post Редактируемый пост, предоставленный для контекста, или ноль.
 * @param string $ post_type Тип сообщения, для которого нужно получить шаблоны.
 * /

функция wpse249984_add_templates ($ post_templates, $ wp_theme, $ post, $ post_type) {
    $ post_templates ['folder-1 / child-folder-1 / my-template.php'] = 'Мой шаблон';

    вернуть $ post_templates;
}
add_filter ('theme_page_templates', 'wpse249984_add_templates', 10, 4);

*Подробности:
Глядя на /wp-includes/class-wp-theme.php.
Глубина 1 жестко запрограммирована и не может быть изменена. В WP_Theme :: get_post_templates () важной строкой является $ files = (array) $ this-> get_files ('php', 1); где 1 - аргумент $ глубины.
/ **
 * Возвращает шаблоны сообщений темы.
 *
 * @since 4.7.0
 * @ доступ общественности
 *
 * @return array Массив шаблонов страниц с указанием имени файла и типа записи,
 * со значением переведенного заголовка.
 * /
публичная функция get_post_templates () {
    // Если вы испортили свою текущую тему, и мы аннулировали ваш родитель, большинство вещей все еще работает. Пусть это скользит.
    if ($ this-> errors () && $ this-> errors () -> get_error_codes ()! == array ('theme_parent_invalid')) {
        возвратный массив ();
    }

    $ post_templates = $ this-> cache_get ('post_templates');

    if (! is_array ($ post_templates)) {
        $ post_templates = array ();

        $ files = (array) $ this-> get_files ('php', 1);

        foreach ($ files as $ file => $ full_path) {
            ...

    вернуть $ post_templates;
}

...
/ **
 * Вернуть файлы в каталоге темы.
 * @param mixed $ type Необязательно. Массив расширений для возврата. По умолчанию все файлы (ноль).
 * @param int $ глубина Необязательно. Как глубоко искать файлы. По умолчанию используется плоское сканирование (глубина 0). -1 глубина бесконечна.
 * @param bool $ search_parent Необязательно. Нужно ли возвращать родительские файлы. По умолчанию false.
 * @return array Массив файлов с указанием пути к файлу относительно каталога темы, со значениями
 * быть абсолютными путями.
 * /
публичная функция get_files ($ type = null, $ deep = 0, $ search_parent = false) {
    ...
}
Создан 21-12-2016 11:44 Dave Romsey12.5k83653