在 WPBakery创建了自定义元素。在 functions.php文件中,有以下内容:
add_action( 'vc_before_init', 'vc_before_init_actions' );
function vc_before_init_actions() {
require_once('vc_elements/text-image/init.php' );
require_once('vc_elements/text/init.php' );}
然而,当我构建更多的自定义元素时,这个列表太大了。我要做的是在每个 vc_elements 子文件夹中加载所有名为 init.php的文件。
这是我目前的folder 结构:
vc_elements
text-image
init.php
text
init.php
最简洁的方法是什么?
假设目录只包含您需要的元素的子目录,那么类似这样的操作可能会奏效。
$dir = 'path/to/vc_elements';
// Scan directory for its contents and put in array. Remove possiblity of . or ..
$files = array_diff(scandir($dir), array('..', '.'));
foreach ($files as $file) {
$name = '/path/to/vc_elements/' . $file . '/init.php';
require($name);
}
您需要使用 RecursiveDirectoryIterator 来扫描该文件夹并获取名为 init.php 的所有文件。 用下面的代码
add_action( 'vc_before_init', 'vc_before_init_actions' );
function vc_before_init_actions() {
$dir = '/full_path_to_vc_elements';
$files = getFiles($dir, 'init.php');
foreach( $files as $file) {
require_once( $file );
}
}
function getFiles($dir, $match) {
$return = array();
$iti = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach($iti as $file){
if ($file->isDir()) {
continue;
}
if(strpos($file , $match) !== false){
$return[] = $file->getPathname();
}
}
return $return;}
因此,将来如果你在文件夹中添加任何 init.php 文件,getFiles ()将自动选择它
What I'm looking to do is load all files named init.php in each vc_elements subfolder.
我要做的是在每个 vc elements 子文件夹中加载所有名为 init.php 的文件。
假设您指的是“ vc 元素”的直接子目录,那么可以使用带有“ * ”的 globaliterator 作为子目录通配符:
$myInitFiles = new GlobIterator('/path/to/vc_elements/*/init.php');foreach ($myInitFiles as $file) {
require_once( $myInitFiles->key() );}
unset($myInitFiles); // release object memory for garbage collection
显然,如果需要,您可以将其转换为 general function。
不确定你的主题的文件结构是什么,但是如果你有一个文件夹,比如 inc 或者 int ,那么在这个文件中创建一个名为vc-functions.php的文件。
add_action( 'vc_before_init', 'vc_before_init_actions' );
function vc_before_init_actions() {
require_once('vc_elements/text-image/init.php' );
require_once('vc_elements/text/init.php' );}
然后在 functions.php 中
require get_template_directory() . '/inc/vc-functions.php';