acato-plugins / wp-muplugin-loader
WordPress 的内置 MU 插件加载器
Requires
- php: ^7.2 || ^8.0
- composer-plugin-api: ^1.0 || ^2.0
Requires (Dev)
- 10up/wp_mock: ^0.4
- composer/composer: ^1.10 || ^2.0
- mockery/mockery: ~1.3
- phpunit/phpunit: ^9
README
归属
- 此包是从 WP Must-Use Plugin Loader 分支出来的,而后者又从 WP Must-Use Plugin Loader 分支出来的。我们进行分支是为了添加对
force-mu
依赖的支持。我们很高兴将这个贡献回这个包,但由于我们的使用是一个边缘情况,所以我们没有发起 pull request。
概述
使用 Composer Installers 库来管理插件非常出色。然而,它对 MU 插件的处理还有待改进。
WordPress MU (必须使用) 插件是放置在 wp-content/mu-plugins/
文件夹中的文件。这些文件会自动加载。问题是当插件实际上在一个文件夹内时。WordPress 只会加载 .php 文件,不会进入任何目录。当 Composer Installers 插件运行时,它总是将仓库放入一个很好的封装文件夹中。这意味着 Composer Installers 的 MU 插件永远不会真正运行!
有手动解决方法,但这需要手动步骤。我想在运行安装时摆脱任何手动步骤。没有额外的文件,只需运行 composer install
或 composer update
即可。这就是 WP Must-Use Plugin Loader 所做的。
使用说明
在你的项目的 composer.json
文件中,需要此包。
"require": { "composer/installers": "~1.2.0", "johnpbloch/wordpress": "*", "acato-plugins/wp-muplugin-loader": "~1.0", }
确保在你的 composer.json
文件的 extras
中定义了你的 mu-plugins 路径。
"extra": { "installer-paths": { "app/wp-content/themes/{$name}": [ "type:wordpress-theme" ], "app/wp-content/plugins/{$name}": [ "type:wordpress-plugin" ], "app/wp-content/mu-plugins/{$name}": [ "type:wordpress-muplugin" ] }, "wordpress-install-dir": "app/wp" }
就是这样。
当 Composer 输出其自动加载文件时,一个名为 mu-require.php
的文件将放置在你的 mu-plugins 文件夹中。当 WordPress 将此文件作为 MU 插件加载时,它将在你的 MU 插件目录中的所有文件夹中找到所有插件,并将它们也包括在内。
更改生成的文件名
如果你需要控制生成的文件名,你可以在 composer.json
文件的 extra 部分中设置它。
"extra": { ... "mu-require-file": "custom-mu-require-filename.php" }
类似地,如果你希望完全关闭此文件的生成,你可以将其设置为 false。
"extra": { ... "mu-require-file": false }
强制 MU 插件
通常当你使用 MU 插件时,你有一些“正常”的 WordPress 插件,你希望它们始终处于活动状态。它们不一定是 MU 插件,因此将 "type": "wordpress-muplugin"
放入 composer.json
文件中是没有意义的。WP Must-Use Plugin Loader 允许你根据需要将类型从 wordpress-plugin
覆盖为 wordpress-muplugin
。
为此,在 composer.json
文件的 extra
部分中定义一个 "force-mu"
键。此键应包含要强制转换为必须使用状态的插件的 slugs 数组。
这与 WPackagist 兼容。当从 WPackagist 添加插件时,使用插件的正常 slug,而不是 wp-packagist 版本。
"require": { "johnpbloch/wordpress": "*", "acato-plugins/wp-muplugin-loader": "~1.0", "wpackagist-plugin/rest-api": "*" }, "extra": { "force-mu": [ "rest-api" ], "installer-paths": { "app/wp-content/themes/{$name}": [ "type:wordpress-theme" ], "app/wp-content/plugins/{$name}": [ "type:wordpress-plugin" ], "app/wp-content/mu-plugins/{$name}": [ "type:wordpress-muplugin" ] }, "wordpress-install-dir": "app/wp" }
当 rest-api
插件安装时,它将不会放入常规插件文件夹中,而是被推送到 mu-plugins 文件夹,并与其他必须使用的插件一起自动加载。
从依赖包强制 MU 插件
就像从主 composer.json
强制 MU 插件一样,你也可以从依赖的 composer.json
强制它们。所有 force-mu
键都将合并为一个 MU 插件集合。
强制Unix目录分隔符
如果您在Windows上工作,但使用Linux虚拟机运行开发服务器,可能需要强制使用Unix目录分隔符以确保服务器可以找到mu加载器脚本。如果是这样,您可以在extra
块中设置另一个配置
"extra": { "force-unix-separator": true }
修改mu插件的src目录
您可能希望更改mu插件要加载的src目录。例如,在WordPress VIP项目中,您可能希望使用此加载器从client-mu-plugins加载mu插件。为此,您可以设置一个常量来告知mu插件加载器您的mu插件存储位置
define('MU_PLUGIN_LOADER_SRC_DIR', WPCOM_VIP_CLIENT_MU_PLUGIN_DIR . '/');