必用插件(Must-use plugins),也称为 mu-plugins,是安装在 content 文件夹内特殊目录中的插件。它们会在安装中的所有站点上自动启用。

必用插件不会显示在 wp-admin 中插件屏幕的默认列表中,尽管它们会出现在单独的必用部分。无法从 wp-admin 禁用必用插件。要禁用必用插件,请从必用插件目录(默认为 wp-content/mu-plugins)中移除插件文件。

网络主机通常使用 mu-plugins 来添加对主机特定功能的支持,特别是那些如果移除插件会导致站点损坏的功能。

若要手动更改默认目录,请在 wp-config.php 中定义 WPMU_PLUGIN_DIR 和 WPMU_PLUGIN_URL。

何时使用必用插件

必用插件适用于那些应该始终运行且不应从 wp-admin 意外禁用的代码。

常见用例包括:

  • 主机特定集成,例如缓存、监控或平台兼容性代码。
  • 必须在正常插件之前加载的站点特定引导代码。
  • 应保持整个站点处于活动状态的安全、性能或维护功能。
  • 多站点安装中的网络级功能。

何时不使用必用插件

必用插件并非在所有情况下都能替代普通插件。避免在以下插件中使用 mu-plugins 目录:

  • 需要从 wp-admin 进行激活或禁用的插件。
  • 依赖激活钩子、禁用钩子或卸载钩子的插件。
  • 需要在 wp-admin 中接收正常插件更新通知的插件。
  • 旨在像常规 WordPress 插件一样分发和管理的插件。
  • 应作为站点所有者或管理员可选功能的插件。

功能特性

  • 始终开启,无需在 wp-admin 中启用。
  • 用户无法意外禁用。
  • 可以通过将 PHP 文件上传到 mu-plugins 目录来启用。
  • PHP 按字母顺序加载必用插件,早于正常插件。这意味着在 mu-plugin 中添加的钩子可以应用于正常插件,即使这些正常插件在全局命名空间中运行钩子函数。

注意事项

尽管 mu-plugins 系统适用于许多特殊情况,但它并不总是理想的,并且在某些情况下存在几个缺点使其不合适。以下是需要记住的几个重要注意事项:

  • 必用目录中的插件不会出现在更新通知中,也不会显示在插件屏幕上的更新状态,因此您需要自己了解并执行更新。
  • 添加到必用插件文件夹的插件不会执行激活钩子。许多插件使用这些钩子在激活插件时运行设置代码或在删除插件时运行清理代码。依赖这些钩子的插件可能在 mu-plugins 文件夹中无法正常工作。在将插件部署到生产站点之前,请在 mu-plugins 目录中仔细测试插件。
  • WordPress 仅查找直接位于 mu-plugins 目录中的 PHP 文件。与正常插件不同,子目录中的文件不会自动包含。您可能希望在 mu-plugins 目录中创建一个代理 PHP 加载器文件:
wp-content/
  mu-plugins/
    load.php
    my-plugin/
      my-plugin.php
<?php // mu-plugins/load.php
require WPMU_PLUGIN_DIR . '/my-plugin/my-plugin.php';

维护与安全

由于必用插件始终加载,请保持它们小巧、经过审查和文档化。损坏的 mu-plugin 会影响整个站点,而受损的 mu-plugin 比正常插件更难被发现,因为它无法从主插件列表中禁用。

记录每个 mu-plugin 存在的原因、维护者以及应如何更新它。如果主机或机构为站点添加了 mu-plugins,站点所有者应知道这些文件的存在及其可能影响站点行为。

历史与命名

mu-plugins目录最初由 WPMU(WordPress MultiUser)实现,旨在为站点管理员提供一种简单的方法,以便在网络中的所有博客上默认激活插件。这是因为在当时,多用户特定代码未提供从站点管理部分管理此功能的方法。

后来,WordPress MultiUser 被合并到 WordPress 核心中,该功能现在称为 Multisite(多站点)。如今,Multisite 包括从管理界面管理插件的功能。

处理 /mu-plugins/ 的代码于 2009 年 3 月 7 日通过 此变更集 合并到主 WordPress 代码中,早于 WPMU 代码库的初始合并。这使得自动加载的插件对所有 WordPress 站点可用,无论是否启用了 Multisite。

在此过程中,“mu plugins”这个名字变得不准确,因为它不再专门适用于 Multisite 安装。尽管如此,该名称被保留并重新解释为“必用插件”。这些是必须始终使用的插件,因此它们会根据 wp-admin 中插件屏幕的设置进行自动加载。

因此,“must-use”实际上是一个 回文缩写。

源代码