我的autoloader类负责加载必须使用的插件,这些插件不位于mu-plugins
文件夹要定位它们,我需要使用get_plugins()
作用According to Codex, 该函数接受一个参数:
$plugin\\u folder(string)(可选):单个插件文件夹的相对路径。
我的文件层次结构如下所示:
|-- /mu-plugins
| |-- autoload.php // only includes wpmu/autoload.php
| |-- /wpmu
| | |-- autoload.php // uses **get_plugins()** and autoloads other MU plugins
| |-- /mu-plugin-to-autoload-A
| | |-- plugin-file-to-autoload.php // this plugin file should be autoloaded
| |-- /mu-plugin-to-autoload-B
| | |-- plugin-file-to-autoload.php // this plugin file should be autoloaded
我想我应该这样做:
// array to store plugins
$plugins = [];
// get mu-plugin folders
$plugin_dirs = glob(WPMU_PLUGIN_DIR . \'/*\' , GLOB_ONLYDIR);
// loop through mu-plugin folders
foreach ($plugin_dirs as $plugin_dir) {
$plugins[] = get_plugins($plugin_dir);
}
然而,get\\u plugins()函数返回一个空数组。
我想实现与Sébastien Lavoie在his Gist on GitHub. 它的脚本应该位于WPMU文件夹的根上,因为它使用get_plugins(\'/../mu-plugins\')
, 这我一点都不明白(它是否来回移动到wpmu插件文件夹?)。
$plugins = array();
foreach (get_plugins(\'/../mu-plugins\') as $plugin_file => $data) {
if (dirname($plugin_file) != \'.\') { // skip files directly at root
$plugins[] = $plugin_file;
}
}
尽管如此,
it works (正如我所测试的)。
我希望一切都有意义。:)
SO网友:gmazzap
“get\\u plugins”仅用于常规插件,它还会查看插件头,并仅返回具有有效插件的插件,如
/* Plugin Name: A plugin */
然而,mu插件即使没有这个头也可以工作。
还考虑到WP 3.9引入了功能wp_register_plugin_realpath
这应用于确保与symbolink链接文件夹的兼容性。
根据Ryan McCue on make.wordpress.org 一个简单但有效的mu插件加载程序应该是这样的:
<?php
$plugins = array(
\'my-mu-plugin/my-mu-plugin.php\'
);
foreach ( $plugins as $plugin ) {
$path = dirname( __FILE__ ) . \'/\' . $plugin;
// Add this line to ensure mu-plugins subdirectories can be symlinked
wp_register_plugin_realpath( $path );
include $path;
}
The
$plugins
这里的数组是硬编码的。诚然,我发现这种方法比
glob
+
get_plugins
因为:
它速度更快,适用于没有任何插件头的mu插件。当然,每次安装新插件时都需要手动在阵列上添加一行,但这不是一个大问题,而且还可以轻松停用mu插件。