Как включить все файлы из папки в functions.php?

25 мая 2017 г., 10:45:36
Просмотры: 19.7K
Голосов: 1

Мой functions.php включает другие файлы функций, расположенные в папке 'functions'.

Сейчас они подключаются индивидуально, в таком формате:

include('functions/login.php');

Как изменить это, чтобы автоматически включать все файлы из папки 'functions' без их перечисления?

0
Все ответы на вопрос 2
7

Вы можете рекурсивно подключить все файлы *.php, используя следующую функцию.

foreach(glob(get_template_directory() . "/*.php") as $file){
    require $file;
}

Альтернативно вы также можете использовать следующую функцию.

$Directory = new RecursiveDirectoryIterator(get_template_directory().'functions/');
$Iterator = new RecursiveIteratorIterator($Directory);
$Regex = new RegexIterator($Iterator, '/^.+\.php$/i', RecursiveRegexIterator::GET_MATCH);

foreach($Regex as $yourfiles) {
    include $yourfiles->getPathname();
}

P.S. Нашел решение здесь.

25 мая 2017 г. 10:51:09
Комментарии

@ JItendra Rana ... Спасибо. Можно ли это изменить, чтобы включить файлы из подкаталогов внутри директории 'functions'?

glvr glvr
25 мая 2017 г. 12:38:18

Вы хотите включить все файлы рекурсивно во всех подкаталогах?

JItendra Rana JItendra Rana
25 мая 2017 г. 13:00:43

Обновил ответ на более элегантное решение для рекурсивных директорий. Пожалуйста, проверьте

JItendra Rana JItendra Rana
25 мая 2017 г. 13:14:02

@ JItendra Rana ... Спасибо. Я получаю различные ошибки с обновленным кодом, поэтому буду использовать ваше предыдущее предложение, которое, как я думаю, было: foreach(glob('/add_path_to_theme/wp-content/themes/theme-name/functions/*.php') as $file) {include $file;} Если это ваш код, возможно, стоит добавить его снова в обновление, чтобы другие могли его использовать.

glvr glvr
30 мая 2017 г. 10:29:09

Обновил ответ. Пожалуйста, проверьте.

JItendra Rana JItendra Rana
30 мая 2017 г. 10:48:48

Есть ли какие-то проблемы с безопасностью при таком подходе?

Ben Ben
1 мая 2018 г. 05:34:35

Это довольно обширный ответ. Всё зависит от того, с каким приложением/фреймворком вы работаете. А также от того, доступны ли файлы напрямую или нет. Избегайте подобных вещей, если не уверены в своих действиях.

JItendra Rana JItendra Rana
1 мая 2018 г. 09:09:11
Показать остальные 2 комментариев
0

Вот как я это реализовал в файле functions.php WordPress:

/**
 * Функции
 * Подключаем все PHP-файлы из директории /functions/
 */
foreach (glob(get_template_directory() . "/functions/*.php") as $function) {
    $function = basename($function);
    require get_template_directory() . '/functions/' . $function;
}
25 мая 2017 г. 19:27:42