boxuk / wp-muplugin-loader
WordPress 的内置 MU 插件加载器
Requires
- php: ^7.4 || ^8.0 || ^8.1 || ^8.2
- composer-plugin-api: ^1.0 || ^2.0
- ext-json: *
Requires (Dev)
- 10up/wp_mock: ^1.0
- composer/composer: ^1.10 || ^2.0
- composer/pcre: ^3.1
- mockery/mockery: ~1.3
- phpunit/phpunit: ^9
- psr/container: 1.1.2
- dev-master
- 2.2.0
- 2.1.0
- 2.0.0
- 2.0.0-beta
- 2.0.0-alpha
- 1.x-dev
- 1.6.1
- 1.6.0
- 1.5.1
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.2
- 1.1.1
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.0
- dev-dependabot/composer/composer/composer-2.7.6
- dev-dependabot/composer/phpunit/phpunit-9.6.19
- dev-dependabot/composer/mockery/mockery-1.6.11
- dev-dependabot/composer/composer/pcre-3.1.3
- dev-dependabot/composer/10up/wp_mock-1.0.1
- dev-filter-muplugins-loading
- dev-travis-dist-upgrade
- dev-transient-expiration
This package is auto-updated.
Last update: 2024-09-06 15:08:06 UTC
README
归属
- 此包是从 WP Must-Use Plugin Loader 分支出来的,因为它似乎已被遗弃。如果维护者再次接管项目,我们很乐意将我们的工作贡献回去。
概览
使用 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": "*", "boxuk/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": { ... "mu-require-file": "custom-mu-require-filename.php" }
同样,如果你希望完全关闭此文件的生成,你可以将其设置为 false
"extra": { ... "mu-require-file": false }
强制 MU 插件
通常当你使用 MU 插件时,你有一些“常规”WordPress 插件你想始终激活。它们不总是 MU-插件,所以在 composer.json
文件中放入 "type": "wordpress-muplugin"
没有意义。WP Must-Use Plugin Loader 允许你根据需要将类型从 wordpress-plugin
强制更改为 wordpress-muplugin
。
为此,在 composer.json
文件的 "extra"
中定义一个 "force-mu"
键。此键应包含一个数组,用于强制将插件置于必须使用状态。
这与 WPackagist 兼容。当从 WPackagist 添加插件时,请使用插件的正常 slug,而不是 wp-packagist 版本。
"require": { "johnpbloch/wordpress": "*", "boxuk/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 文件夹中,并与其他必须使用的插件一起自动加载。
强制 Unix 目录分隔符
如果你在 Windows 上工作,但使用 Linux VM 运行开发服务器,你可能需要强制 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 . '/');
过滤 mu 插件的加载
您可能希望过滤 mu 插件加载器加载的 mu 插件。WordPress 并未提供足够早的钩子来确保在插件加载之前注册此过滤器,因此应在 mu-loader 初始化之前立即应用此列表的过滤。您可以像下面那样修改 mu-require.php
文件,或者创建一个在您的 mu-plugins
目录中按字母顺序位于 mu-require.php
文件之前的新文件。
add_filter( 'lkwdwrd_mupluginloader_get_muplugins', function ( array $plugins ): array { unset( $plugins['example/plugin.php'] ); return $plugins; } ); // Load the mu loader require_once 'vendor/boxuk/wp-muplugin-loader/src/mu-loader.php';