boxuk/wp-muplugin-loader

WordPress 的内置 MU 插件加载器

安装次数: 304,514

依赖项: 11

建议者: 0

安全: 0

星标: 19

关注者: 4

分支: 26

开放性问题: 6

类型:composer-plugin

2.2.0 2023-08-03 15:23 UTC

README

Build Status

归属

  • 此包是从 WP Must-Use Plugin Loader 分支出来的,因为它似乎已被遗弃。如果维护者再次接管项目,我们很乐意将我们的工作贡献回去。

概览

使用 Composer Installers 库管理插件工作得非常好。然而,它对 MU 插件的处理还有待提高。

WordPress MU(必须使用)插件是放置在 wp-content/mu-plugins/ 文件夹中的文件。这些文件将自动加载。问题是当一个插件实际上在一个文件夹内部时。WordPress 只会加载 .php 文件,不会进入任何目录。当 Composer Installers 插件运行时,它总是将仓库放入一个美好的封装文件夹中。这意味着 Composer Installers MU 插件实际上从未运行过!

有手动解决这个问题的方法,但我想在运行安装时摆脱任何手动步骤。没有额外的文件,只需运行 composer installcomposer update 即可。这就是 WP Must-Use Plugin Loader 所做的。

使用说明

在你的项目 composer.json 文件中,需要这个包。

"require": {
	"composer/installers": "~1.2.0",
	"johnpbloch/wordpress": "*",
	"boxuk/wp-muplugin-loader": "~1.0",
}

确保在 composer.jsonextras 中定义了你的 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';