Требовать все блоки, найденные в папке (а не записывать их все) - PullRequest
2 голосов
/ 24 июня 2019

Я создаю пользовательские элементы для Visual Composer WP Plugin. В functions.php я ссылаюсь на каждый блок, чтобы он загружался на стороне администратора:

function vc_before_init_actions() {
    require_once('vc_elements/hero/hero.php');  
    require_once('vc_elements/text-image/text-image.php' );  
}

Однако, если у меня будет двадцать пользовательских элементов, мне придется ссылаться на них все по отдельности. Есть ли способ просто загрузить все блоки, которые находятся в папке vc_elements?

Я знаю, что потенциальным камнем преткновения может быть тот факт, что каждый из моих custom elements находится в разных папках (т.е. hero.php находится в vc_elements > hero > hero.php). Возможно ли это с моей текущей структурой папок?

1 Ответ

1 голос
/ 24 июня 2019

Вы можете попробовать этот код: он потребует файл, только если этот файл находится в подпапке пути, который вы указали для функции requireBlockFiles и , файл является файлом PHP и имя папки совпадает с именем файла (cf file hero.php в подпапке hero)

function requireBlockFiles($dir){
    $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));

    foreach ($rii as $file) {
        if ($file->isDir()){
            continue;
        }

        if(strtolower($file->getExtension()) === 'php' && $file->getPathInfo()->getFilename() . '.' . $file->getExtension() === $file->getFilename()){
            require_once($file->getPathname());
        }
    }
}

function vc_before_init_actions() {
    requireBlockFiles('vc_elements');
}

ПРИМЕЧАНИЕ: это будет с учетом регистра для совпадения имени папки и имени файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...