Создавать собственные шаблоны страниц с помощью плагинов?

Можно ли создавать настраиваемые шаблоны страниц из плагина?

49 голосов | спросил jnthnclrk 28 +04002010-10-28T21:04:20+04:00312010bEurope/MoscowThu, 28 Oct 2010 21:04:20 +0400 2010, 21:04:20

3 ответа


64

get_page_template () можно переопределить через фильтр page_template. Если ваш плагин - это каталог с шаблонами в виде файлов в них, это просто вопрос передачи имен этих файлов. Если вы хотите создать их «на лету» (отредактируйте их в области администрирования и сохраните их в базе данных?), Вы можете записать их в каталог кеша и обратиться к ним или подключиться к template_redirect и сделать несколько безумных eval ( ).

Простой пример для плагина, который «перенаправляет» на файл в том же каталоге плагинов, если определенный критерий верен:

add_filter ('page_template', 'wpa3396_page_template');
function wpa3396_page_template ($ page_template)
{
    if (is_page ('my-custom-page-slug')) {
        $ page_template = dirname (__FILE__). '/custom-page-template.php';
    }
    return $ page_template;
}
ответил Jan Fabry 2 22010vEurope/Moscow11bEurope/MoscowTue, 02 Nov 2010 16:52:24 +0300 2010, 16:52:24
11

Переопределение get_page_template () - это просто быстрый взлом. Он не позволяет выбирать шаблон из экрана администратора, а пул страниц жестко закодирован в плагин, чтобы пользователь не мог узнать, откуда идет шаблон.

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

/*
 * Инициализирует плагин, устанавливая фильтры и административные функции.
 * /
частная функция __construct () {
        $ this-> templates = array ();

        //Добавить фильтр в атрибуты metabox для вставки шаблона в кеш.
        add_filter ( 'page_attributes_dropdown_pages_args',
            array ($ this, 'register_project_templates')
        );

        //Добавить фильтр в сообщение сохранения, чтобы вставить шаблон в кеш страницы
        add_filter ( 'wp_insert_post_data',
            array ($ this, 'register_project_templates')
        );

        //Добавьте фильтр в шаблон, чтобы определить, имеет ли страница наш
        //задан шаблон и возвращает его путь
        add_filter ( 'template_include',
            array ($ this, 'view_project_template')
        );

        //Добавьте ваши шаблоны в этот массив.
        $ this-> templates = array (
                'goodtobebad-template.php' => «Это хорошо, чтобы быть плохим»,
        );
}
ответил fireydude 12 +03002015-10-12T14:29:34+03:00312015bEurope/MoscowMon, 12 Oct 2015 14:29:34 +0300 2015, 14:29:34
4

Да, это возможно. Я нашел этот примерный плагин очень полезным.

Другой подход, который приходит мне в голову, заключается в использовании API файловой системы WP для создания файла шаблона для темы , Я не уверен, что это лучший подход, но я уверен, что он работает!

ответил KeepMove 4 ThuEurope/Moscow2014-12-04T18:37:08+03:00Europe/Moscow12bEurope/MoscowThu, 04 Dec 2014 18:37:08 +0300 2014, 18:37:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132