Я хочу создать тематический плагин для темы, основанной на opern-source Bootstrap Genesis, где я могу использовать функцию add_theme_support
для добавления или удаления нескольких мини-плагинов или модулей / функций темы, которые у меня есть в add_theme_support
плагина. Я нашел этот вопрос здесь , но не мог понять это на основе принятого ответа.
Таким образом, структура плагина будет выглядеть так:
themeplugin/ ├── addons/ │ ├── addon1.php │ ├── addon2.php │ └── addon3.php └── themeplugin.php
Основной файл плагина, назовем его themeplugin.php
:
<?php /* Plugin Name: My Theme Name Addons Plugin URI: https://example.com Description: A collection of mini plugins/addons to apply specific changes. Version: 1.0 Author: Author Name Author URI: https://example.com/author License: MIT License License URI: http://opensource.org/licenses/MIT */ function load_themename_addons() { foreach (glob(__DIR__ . '/addons/*.php') as $file) { if (current_theme_supports('themename-' . basename($file, '.php'))) { require_once $file; } } } add_action('after_setup_theme', 'load_themename_addons');
Тогда в моих functions.php
я мог бы включить эти функции / дополнения плагина, добавив поддержку темы, используя каждое имя файла addons:
<?php /* functions.php */ add_theme_support('themename-addon1.php'); add_theme_support('themename-addon1.php'); add_theme_support('themename-addon1.php');
Тем не менее, это не работает, и я не могу понять, что мне не хватает … Когда я удаляю поддержку поддержки темы, это прекрасно работает:
function load_themename_addons() { foreach (glob(__DIR__ . '/addons/*.php') as $file) { require_once $file; } } add_action('after_setup_theme', 'load_themename_addons');
Выяснилось, что после игры с Rarsts ответьте здесь .
Вот что я закончил :
<?php /* Plugin Name: Bootstrap Genesis Addons Plugin URI: https://github.com/bryanwillis/bootstrap-genesis-addons Description: A collection of mini plugins/addons to apply specific changes to my site. Version: 1.0 Author: Bryan Willis Author URI: https://github.com/bryanwillis/ License: MIT License License URI: http://opensource.org/licenses/MIT */ function bootstrap_genesis_addons() { global $_wp_theme_features; foreach (glob(__DIR__ . '/addons/*.php') as $file) { $feature = 'bsg-' . basename($file, '.php'); if (isset($_wp_theme_features[$feature])) { require_once $file; } } } add_action('after_setup_theme', 'bootstrap_genesis_addons', 100);
Плагин темы должен следовать этой файловой структуре:
bsg-addons/ ├── addons/ │ ├── foo.php │ ├── bar.php │ └── baz.php └── bsg-addons.php
Все аддоны должны быть добавлены в подпапку под названием addons с уникальным именем для каждого файла.
Последнее добавление поддержки тем же способом, что и вы:
add_theme_support('bsg-foo');
Где приведенное выше название темы поддерживает имя «bsg-» + «foo», где «foo» – это одно из базовых имен файлов, созданных вами в папке аддонов: bsg-addons/addons/foo.php
Похоже, что он отлично работает, и, по моему мнению, он намного более чист, чем добавление в базу данных ненужных данных для выполнения активации / деактивации модулей или особых функций, таких как пользовательские типы сообщений. Он также работает для добавления целых плагинов непосредственно в вашу тему.