Обязательные плагины в WordPress: все о MU-плагинах, преимущества и минусы

Обязательные плагины в WordPress (MU-плагины)

Обязательные плагины (mu-plugins) – это плагины, которые устанавливаются в специальную папку /wp-content/mu-plugins. Они всегда активны для вашего сайта и всех сайтов в сети при использовании мультисайта.

Эти плагины нельзя отключить через панель администратора. Чтобы их отключить, нужно удалить файл плагина из директории wp-content/mu-plugins.

WordPress автоматически подключает все PHP-файлы из папки /wp-content/mu-plugins. Внутренние папки этой директории не проверяются. Подключение PHP-файлов из внутренних папок нужно прописывать вручную в файле, который находится прямо в папке /mu-plugins.

Mu-плагины отображаются в верхней информационной строке панели администратора.

Обязательные плагины в WordPress

Содержание

  • Изменение директории MU-плагинов
  • Плюсы и минусы
  • Когда полезно использовать mu-плагины?
  • Как это работает?
  • История MU-плагинов

Изменение директории MU-плагинов

Директорию MU-плагинов можно изменить. Для этого нужно определить константы WPMU_PLUGIN_DIR и WPMU_PLUGIN_URL в файле wp-config.php.

Плюсы и минусы

Преимущества обязательных плагинов

  • Всегда активны: нет необходимости активировать их в панели администратора. Пользователи не могут отключить их случайно или намеренно.

  • Простота подключения: нужно просто добавить файл плагина в директорию wp-content/mu-plugins.

  • Загружаются на раннем этапе: mu-плагины загружаются раньше обычных плагинов. Файлы подключаются в алфавитном порядке.

Недостатки обязательных плагинов

  • Нет проверки обновлений: для mu-плагинов не будет уведомлений о новых версиях. Необходимо самостоятельно следить за обновлениями.

  • Не работают хуки: функции для активации и деактивации плагинов не работают. При активации вам придется вручную добавлять таблицы или настройки в базу данных, а при деактивации – удалять все, что связано с плагином.

  • Поиск файлов: WordPress ищет PHP-файлы в директории плагина иначе, чем в обычных плагинах – он не проверяет внутренние папки. Вам нужно создать файл-загрузчик в директории вашего плагина, чтобы подключить файлы из поддиректорий. Например:

// mu-plugins/load.php
require WPMU_PLUGIN_DIR .'/my-plugin/my-plugin.php';

Когда полезно использовать mu-плагины?

Mu-плагины полезны в случаях, когда это удобнее, чем использование обычных плагинов. Например, недавно я добавил код в форме mu-плагина для настройки 301 редиректов с устаревших URL, когда менял структуру URL на старом сайте. Это оказалось лучшим решением, потому что:

  • Вставлять такой редирект в тему неверно – что если тему заменят, и все редиректы исчезнут?

  • Если установить как обычный плагин, случайное его отключение приведет к исчезновению всех редиректов. Можете этого и не заметить.

Как это работает?

Mu-плагины загружаются раньше обычных плагинов. Рассмотрим схему загрузки WordPress. Вот интересная схема, которую я нашел:

Схема загрузки WordPress

Рассмотрим код, который отвечает за mu-плагины, взятый из файла wp-settings.php:

// Загружаем обязательные плагины.
foreach ( wp_get_mu_plugins() as $mu_plugin ) {
    include_once $mu_plugin;

    /**
     * Срабатывает один раз после загрузки обязательного плагина.
     *
     * @since 5.1.0
     *
     * @param string $mu_plugin Полный путь к главному файлу плагина.
     */
    do_action( 'mu_plugin_loaded', $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 файлы, они сортируются по алфавиту и подключаются один за другим.

История MU-плагинов

Директория "mu-plugins" изначально была создана для WPMU (мультипользовательской сети) плагинов, чтобы администраторы могли активировать плагины для всей сети сайтов или блогов. В то время это было важно, поскольку администраторы не могли активировать плагины для всей сети через панель управления. С версии 2.8 это стало возможным.

Код, отвечающий за работу много-пользовательск��х плагинов (mu-плагины), был перенесен в основной код WordPress. И вскоре после этого код WPMU был объединен с основным кодом WordPress, что сделало возможным автоматическую загрузку плагинов на всех сайтах, независимо от их сборки.

В результате изменения название "mu-plugins" утратило свою актуальность, так как теперь mu-плагины работали и для обычных установок. Несмотря на это, название решили оставить, переосмыслив его как "Must-use plugins" (обязательные плагины). Это плагины, которые должны всегда использоваться, они работают для всех сайтов и не зависят от настроек в админке.

Аналогично, PHP изначально означало "Personal Home Page", но затем было переосмыслено как "PHP Hypertext Preprocessor".

Теперь стало традицией выбирать акронимы, которые косвенно или прямо ссылаются на себя. Один из первых примеров – TINT, появившийся в 1977 году: "TINT Is Not TECO".

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *