Must-Use плагіни (mu-plugins) в WordPress

Привіт:) В цьому пості ви познайомитеся із плагінами mu-plugins у WordPress: що це таке, для чого потрібні, як використовувати та реальні приклади.

Що таке Must-Use плагіни та як вони працюють

Must-Use плагіни (mu-plugins) — це обов'язкові для використання плагіни WordPress, які розміщуються у спеціальному каталозі /wp-content/mu-plugins/ і автоматично активуються (тобто активні завжди).

Звичайні плагіни WordPress знаходяться у каталозі /wp-content/plugins/.

Mu-plugins не відображаються у списку плагінів за замовчуванням на адмін-сторінці Плагіни (хоча відображаються в спеціальному розділі Обов’язкові на цій же сторінці). Їх не можна вимкнути, окрім як видалити файл плагіну з каталогу /wp-content/mu-plugins/.

Must-Use плагіни завантажуються раніше звичайних плагінів та завжди активні.
Підтримуються лише PHP файли, що знаходяться безпосередньо в каталозі mu-plugins, вкладені папки не перевіряються.
до змісту ↑

Основні характеристики MU-плагінів

  • Автоматична активація. Плагін починає працювати відразу після додавання його файлу всередину теки /wp-content/mu-plugins/.
  • Відсутність можливості вимкнення через адмін-панель. Вимкнення можливе лише видалення файлу з каталогу mu-plugins.
  • Алфавітний порядок завантаження. Усі файли завантажуються за абеткою, що дозволяє керувати послідовністю виконання коду.
до змісту ↑

Як змінити каталог обов'язкових плагінів

За замовчуванням вони розміщуються у каталозі /wp-content/mu-plugins/. Змінити його можна за допомогою констант WPMU_PLUGIN_DIR та WPMU_PLUGIN_URL у файлі wp-config.php. Для цього наступний код у файл wp-config.php:

define( 'WPMU_PLUGIN_DIR', ' /шлях/до/вашого/каталогу' );
define( 'WPMU_PLUGIN_URL', 'https://ваш-сайт.com/шлях/до/каталогу' );
Зміна каталогу для MU-плагінів потребує відповідного фізичного переміщення всіх файлів до нового каталогу.
до змісту ↑

Переваги плагінів Must-Use

  1. Гарантована робота. MU-плагіни неможливо випадково вимкнути, що є важливим для критично важливих функцій сайту.
  2. Ранній запуск. Ці плагіни завантажуються раніше за звичайні плагіни, забезпечуючи пріоритетне виконання їхнього коду.
  3. Зручність встановлення. Достатньо додати файл до папки mu-plugins, і він автоматично активується на сайті.
до змісту ↑

Недоліки mu-plugins

  1. Відсутність автоматичних оновлень. WordPress не повідомляє про доступні оновлення для MU-плагінів, що вимагає ручної перевірки та оновлення.
  2. Відсутність хуків активації/деактивації. Багато плагінів використовують хуки активації для виконання початкових налаштувань, але MU-плагіни їх не підтримують. Це може обмежити їхню функціональність.
  3. Необхідність ручного підключення вкладених файлів. WordPress автоматично підключає лише файли в корені папки mu-plugins. Вкладені файли вимагають створення завантажувального файлу. WordPress шукає PHP-файли лише в каталозі /wp-content/mu-plugins/ і робить це не так, як для звичайних плагінів, — не переглядає файли всередині вкладених папок. У цьому випадку потрібно буде створити завантажувальний файл у каталозі mu-plugins, щоб він під'єднав файли з підкаталогів. Для підключення файлів з підкаталогів створіть завантажувальний файл, наприклад, load.php, який під'єднає потрібні файли вручну:
// mu-plugins/load.php

require WPMU_PLUGIN_DIR . '/my-plugin/my-plugin.php';
до змісту ↑

Коли варто використовувати Must-Use плагіни

MU-плагіни зручні у таких ситуаціях.

  • Для постійних перенаправлень (редиректів). Наприклад, якщо ви налаштовуєте 301 редирект, то MU-плагін гарантує, що перенаправлення завжди будуть активні, навіть якщо WordPress-тема буде змінена, або звичайний плагін буде вимкнений.
  • Критичні налаштування сайту. Використання MU-плагінів дозволяє захистити важливі налаштування від випадкового вимкнення.
  • Функціональність лише на рівні сервера. MU-плагіни ідеально підходять для додавання серверних функцій. Наприклад, кешування, підключення аналітики або реалізація особливих умов безпеки.
до змісту ↑

Як створити MU-плагін. Приклади

Розгляну декілька практичних прикладів створення MU-плагінів для різноманітних завдань. Кожен із них додає важливі функції, які завжди мають бути активними на сайті.

Приклад 1. Постійний редирект на головну сторінку

У цьому прикладі MU-плагін перенаправлятиме всіх користувачів, які не є адміністраторами, на головну сторінку сайту. Це може бути корисним, якщо сайт тимчасово закритий на обслуговування (виконуються якісь технічні роботи або оновлюється дизайн).

Для цього створіть файл home-redirect.php у каталозі /wp-content/mu-plugins/ та додайте у нього наступний код.

<?php
/*
Plugin Name: Home Redirect
Description: Permanent redirect to the home page for non-admins
Author: Mykhailo Petrov
Author URI: https://petrov.net.ua/
Plugin URI: https://petrov.net.ua/
Version: 1.0
*/

add_action( 'template_redirect', function() {
    if ( ! current_user_can( 'administrator' ) && ! is_home() ) {
        wp_redirect( home_url() );

        exit;
    }
} );

У коді перевіряється чи поточний відвідувач сайту не знаходиться на головній сторінці та чи не є користувачем із правами адміністратора. Якщо така умова задовольняється, він перенаправляється на головну сторінку.

до змісту ↑

Приклад 2. Автоматичне видалення ревізій записів

З кожним циклом редагування посту або сторінки WordPress створює їх копію — ревізію, які зберігаються у базі даних сайту. Це дозволяє у будь-який момент повернути усі попередні зміни вмісту сторінки. Але через накопичення ревізій база даних часто розростається до великих розмірів, що може спричинити відчутне уповільнення роботи сайту.

Код нижче автоматично видаляє ревізії, старші 30 днів.

Створіть файл revisions-clean.php у каталозі /wp-content/mu-plugins/ із таким кодом:

<?php
/*
Plugin Name: Revisions Clean
Description: Delete all revisions
Author: Mykhailo Petrov
Author URI: https://petrov.net.ua/
Plugin URI: https://petrov.net.ua/
Version: 1.0
*/

add_action( 'wp_scheduled_delete', function() {
    global $wpdb;

    $wpdb->query("
        DELETE a, b, c, d
        FROM {$wpdb->posts} a
        LEFT JOIN {$wpdb->term_relationships} b ON (a.ID = b.object_id)
        LEFT JOIN {$wpdb->postmeta} c ON (a.ID = c.post_id)
        LEFT JOIN {$wpdb->comments} d ON (a.ID = d.comment_post_ID)
        WHERE a.post_type = 'revision'
          AND a.post_date < NOW() - INTERVAL 30 DAY
    ");
} );
до змісту ↑

Приклад 3: Встановлення ліміту для завантажень

Якщо потрібно встановити жорсткі обмеження на розмір файлів, які завантажуватимуться через Медіабібліотеку. Це буває корисно якщо на сайті працює декілька зовнішніх авторів що пишуть статті.

Створіть файл downloads-limit.php у каталозі /wp-content/mu-plugins/ та додайте код:

<?php
/*
Plugin Name: Revisions Clean
Description: Delete all revisions
Author: Mykhailo Petrov
Author URI: https://petrov.net.ua/
Plugin URI: https://petrov.net.ua/
Version: 1.0
*/

add_filter( 'upload_size_limit', function( $size ) {
    return 3 * 1024 * 1024; // Обмеження на 3 МБ
} );

Тепер автор не зможе завантажити файл, розмір якого більший 3-х мегабайтів.

до змісту ↑

Особливості оновлення MU-плагінів

Оскільки MU-плагіни не можуть оновлюватися автоматично, та для них не відображаються повідомлення про доступні оновлення, їх оновлення необхідно проводити вручну. Ось декілька рекомендацій як підтримувати MU-плагіни в актуальному стані.

  1. Регулярна перевірка актуальності. Рекомендується періодично перевіряти веб-сайт розробника або репозиторій з вихідним кодом на наявність оновлень.
  2. Резервне копіювання перед оновленням. Перед оновленням MU-плагінів завжди створюйте резервну копію сайту, щоб мати можливість відновити його у разі помилки.
  3. Створення власної версії плагіна. Якщо MU-плагін був налаштований під специфічні потреби сайту, важливо відстежувати зміни в оригінальному коді та обережно вносити оновлення.
до змісту ↑

Керування залежностями для MU-плагінів

Якщо Must-Use плагін залежить від інших плагінів або бібліотек, слід враховувати:

  1. Перевірка залежностей. Якщо MU-плагін залежить від іншого плагіну та потребує щоб той був активним, у своєму коді додайте перевірку чи активований плагін WordPress.
  2. Автоматичне під'єднання залежностей. Якщо MU-плагін потребує певної бібліотеки, ви можете включити її одразу в код свого плагіну або створити окремий файл у папці MU-плагінів, що підключатиме необхідні залежності.
до змісту ↑

Сумісність MU-плагінів з мультисайтом (WordPress Multisite)

Якщо WordPress використовується у режимі мультисайтовості (Multisite), то MU-плагіни можуть бути особливо корисними, оскільки вони автоматично активуються на всіх веб-сайтах мережі. Але є деякі особливості:

  1. Глобальні функції. MU-плагіни можуть задавати глобальні правила для всіх сайтів мережі. Наприклад, обмеження доступу або централізовані перенаправлення.
  2. Налаштування на рівні мережі. Деякі MU-плагіни можуть перевіряти конкретні сайти в мережі та виконувати певні дії лише на них, що додає гнучкості під час роботи з Multisite.
до змісту ↑

Відлагодження MU-плагінів

У процесі розробки Must-Use плагінів використовуються ті ж інструменти відлагодження коду, як і для звичайних WordPress плагінів і тем.

Михайло Петров
Михайло Петров

Мене звати Михайло. Я — WordPress-розробник. Створюю візитки, корпоративні сайти, інтернет-магазини, блоги на WordPress. Надаю консультації з WordPress.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *