Знаком с WordPress довольно долго, а вот про плагины Must-use узнал сравнительно недавно, писать статью на эту тему не думал, но так получилось что пишу — столкнулся с рациональной необходимостью этого типа плагинов…
Must-use plugins (mu-plugins) — обязательные к использованию плагины — это плагины, которые устанавливаются в специальную папку /wp-content/mu-plugins. Они активируются автоматически (т.е. всегда активны) для сайта и сайтов сети.
mu-plugins отображаются в верхней информационной строке в админ-панели.
Их невозможно отключить через админку. Для отключения нужно удалить файл плагина из упомянутого каталога wp-content/mu-plugins.
WordPress автоматически подключает все файлы из папки mu-plugins
, но не проверяет вложенные папки, где могут быть и другие php файлы. Поэтому такие плагины не могут находится в папках — это должен быть файл в папке wp-content/mu-plugins. Подключение файлов из вложенных папок должно прописываться вручную в файле из основной папки.
Изменение каталога MU плагинов
Каталог Обязательных плагинов можно изменить. Для этого нужно определить константы: WPMU_PLUGIN_DIR и WPMU_PLUGIN_URL в файле wp-config.php
.
Плюсы и минусы
Плюсы «необходимых» плагинов
- Всегда включены, нет нужды активировать их в админ-панели. Пользователи не могут их отключить, намеренно или случайно.
- Легко подключать и активировать, для этого просто нужно добавить файл плагина в каталог wp-content/mu-plugins.
- Загружаются на раннем этапе загрузки WordPress — до того, как загрузятся обычные плагины. Файлы подключаются в алфавитном порядке.
Недостатки «необходимых» плагинов
Чаще всего нет необходимости использовать эти плагины, потому что обычные плагины удобнее.
- Не проверяются на наличие обновлений, а значит при появлении новой версии плагина мы не увидим уведомление о необходимости обновить плагин. Поэтому следить за появлением новой версии нужно самостоятельно;
- Хуки активации/деактивации плагина не срабатывает, а ведь именно на них вешаются события связанные с установкой плагина или его удалением. Поэтому при активации добавлять таблицы или опции в базу данных и делать другие действия, а при деактивации удалять все что связано с плагином из базы данных и файлов, придется самостоятельно.
- WordPress ищет php файлы в каталоге my-plugin и делает это не так как для обычных плагинов — не просматривает файлы внутри вложенных папок. В этом случае, нужно будет создать загрузочный файл в каталоге my-plugin, чтобы он подключал файлы из подкаталогов, вот так:
// mu-plugins/load.php require WPMU_PLUGIN_DIR .'/my-plugin/my-plugin.php';
Когда может пригодится использовать mu плагины?
В случаях, когда это удобнее обычного плагина… Я, например, недавно поместил код в виде такого плагина, чтобы установить 301 редиректы со старых URL, когда изменял ЧПУ на уже давно рабочем сайте. Это показалось мне наилучшим решением, ведь:
- вставлять такой редирект в тему неправильно — вдруг тему изменят и все редиректы исчезнут….
- если установить как обычный плагин, то если случайно его отключить все редиректы пропадут, а этого можно не заметить.
Как это работает?
MU плагины загружаются раньше обычных. Давайте посмотрим схему загрузки WordPress. Тут упомяну интересную картинку (очень она мне понравилась):

Что касается кода, как конкретно подключаются файлы. Смотрите фрагмент кода отвечающий за MU плагины, из файла темы wp-settings.php:
// Загружаем MU плагины.
foreach ( wp_get_mu_plugins() as $mu_plugin ) {
include_once( $mu_plugin );
}
unset( $mu_plugin );
Код функции wp_get_mu_plugins():
function wp_get_mu_plugins() {
$mu_plugins = array();
if ( !is_dir( WPMU_PLUGIN_DIR ) )
return $mu_plugins;
if ( ! $dh = opendir( WPMU_PLUGIN_DIR ) )
return $mu_plugins;
while ( ( $plugin = readdir( $dh ) ) !== false ) {
if ( substr( $plugin, -4 ) == '.php' )
$mu_plugins[] = WPMU_PLUGIN_DIR . '/' . $plugin;
}
closedir( $dh );
sort( $mu_plugins );
return $mu_plugins;
}
Как мы видим, директория WPMU_PLUGIN_DIR
проверяется на существование. Если она существует из неё собираются все .php
файлы, сортируются по алфавиту (по возрастанию) и последовательно подключаются.
История появления Must-Use плагинов
Изначально каталог «mu-plugins» был создан для плагинов сети WPMU (Multi-User), чтобы дать возможность администраторам активировать плагины для всей сети сайтов или блогов. На тот момент эта функция была необходима, из-за специфики Мультисайтовой сборки: администраторы не могли активировать плагины для всей сети из админ-панели. С версии 2.8 это стало возможно.
Код отвечающий за multi-user-plugins (mu-plugins), был перенесен в основной код WordPress. А незадолго до этого база кода wpmu была объединена с основной сборкой WordPress и все сайты, независимо от сборки, получили возможность автоматически загружать плагины, и стало неважно простой это WP или WP-Multisite. Такая возможность более удобна для всех видов установок WordPress и для разных ситуаций связанных с созданием сайта.
В результате этого изменения название «mu-plugins» перестало соответствовать действительности, потому что теперь mu-plugins работали и для обычной сборки. Префикс «mu» больше не значил, что эта функция относится к многопользовательской сборке — WPMU. Несмотря на это, название решили оставить, но интерпретировать его иначе «Must-use plugins» (плагины обязательного использования). Т.е. это необходимые плагины — плагины, который всегда должны использоваться. Они работают для всех сайтов и не зависят от плагинов в админ-панели.
С PHP было нечто похожее: когда-то аббревиатура PHP означала «Personal Home Page», но затем была пере-интерпретирована как «PHP Hypertext Preprocessor» и, в духе хакерских традиций, превратилась в рекурсивный акроним.