lkwdwrd / wp-muplugin-loader
WordPress 的内置 MU 插件加载器
Requires
- composer-plugin-api: ^1.0
Requires (Dev)
- 10up/wp_mock: dev-dev
- codeclimate/php-test-reporter: ^0.4.4
- phpunit/phpunit: ^7.1.4
README
使用 Composer Installers 库来管理插件效果显著。然而,它对 MU 插件的处理还有待改进。
WordPress MU(必须使用)插件是放在 wp-content/mu-plugins/
文件夹中的文件。这些文件会自动加载。问题是当插件实际上在一个文件夹内时。WordPress 只会加载 .php 文件,并且不会进入任何目录。当 Composer Installers 插件运行时,它总是将仓库放入一个优雅的包含文件夹中。这意味着 Composer Installers 的 MU 插件永远不会真正运行!
有手动解决方法,但我在运行安装时想避免任何手动步骤。没有额外的文件,只需运行 composer install
或 composer update
即可。这就是 WP 必须使用插件加载器所做的事情。
使用说明
在你的项目的 composer.json
文件中,需要这个包。
"require": { "composer/installers": "~1.2.0", "johnpbloch/wordpress": "*", "lkwdwrd/wp-muplugin-loader": "~1.0.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 插件目录中的所有文件夹中找到所有插件,并将它们也包括在内。
强制 MU 插件
通常当你使用 MU 插件时,你有一些总是需要激活的“常规”WordPress 插件。它们不总是 MU 插件,所以将 "type": "wordpress-muplugin"
放入 composer.json
文件中是没有意义的。WP 必须使用插件加载器允许你根据需要将类型从 wordpress-plugin
强制更改为 wordpress-muplugin
。
为此,在 composer.json
文件的 "extra"
中定义一个 "force-mu"
键。此键应包含一个数组,包含要将插件强制设置为必须使用状态的插件 slugs。
这与 WPackagist 兼容。当从 WPackagist 添加插件时,请使用插件的正常 slug,而不是 wp-packagist 版本。
"require": { "johnpbloch/wordpress": "*", "lkwdwrd/wp-muplugin-loader": "~1.0.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 虚拟机运行开发服务器,你可能需要强制 Unix 目录分隔符以确保服务器可以找到 mu 加载器脚本。如果是这样,extra
块中还有一个配置可以设置。
"extra": { "force-unix-separator": true }