Jak stworzyć mu-plugin WordPress

Mu-plugin WordPressa (must-use plugin) to plik PHP umieszczony w katalogu wp-content/mu-plugins/, który WordPress ładuje automatycznie przy każdym żądaniu. Nie można go wyłączyć z poziomu panelu administracyjnego i uruchamia się przed każdą zwykłą wtyczką. Używaj go do kodu, który musi być zawsze obecny: niestandardowych hooków, reguł bezpieczeństwa, poprawek wydajności lub wcześnie ładowanych stałych.

Innym zastosowaniem mu-pluginu jest dodawanie dodatkowych funkcji do wtyczki lub rdzenia WordPressa. Na przykład WP STAGING posiada wiele filtrów i hooków, które mogą wzbogacić funkcje stagingu i kopii zapasowych WP STAGING. Wszystkie te udokumentowane filtry można dodać do własnego mu-pluginu.

Szybka odpowiedź: Umieść plik .php z nagłówkiem wtyczki w katalogu wp-content/mu-plugins/. WordPress wykryje go przy następnym załadowaniu strony, bez potrzeby aktywacji. Sprawdź w Wtyczki → Wtyczki obowiązkowe, czy został załadowany.

Wprowadzenie do wtyczek Must-Use

Mu-pluginy znajdują się w katalogu wp-content/mu-plugins/ (ścieżkę kontroluje stała WPMU_PLUGIN_DIR) i są ładowane przez WordPressa przed każdą wtyczką z katalogu wp-content/plugins/. Nie pojawiają się na standardowej liście wtyczek i nie można ich wyłączyć z poziomu panelu administracyjnego.

Najczęstszy scenariusz, w którym deweloperzy sięgają po mu-plugin: mają funkcję lub filtr, który wciąż przestaje działać, ponieważ inny administrator wyłącza zawierającą go wtyczkę albo aktualizacja wtyczki nadpisuje daną modyfikację. Mu-plugin usuwa oba te ryzyka naraz.

Oficjalna dokumentacja WordPressa opisuje wtyczki must-use pod adresem wordpress.org/documentation/article/must-use-plugins/.

Jak mu-plugin wypada w porównaniu z innymi miejscami, w których można umieścić ten sam kod?

Opcja Ładuje się automatycznie Przetrwa aktualizacje wtyczek Administrator może wyłączyć Najlepsze zastosowanie
mu-plugin Tak Tak Nie Hooki, które muszą działać, stałe, reguły bezpieczeństwa
Zwykła wtyczka Tylko gdy aktywna Tak Tak Opcjonalne funkcje kontrolowane przez właściciela strony
wp-config.php Tak Tak Nie Wyłącznie stałe PHP define()
.htaccess / php.ini Tak (na poziomie serwera) Tak Nie Przekierowania serwera i ustawienia PHP ini

Zalety Mu-Pluginów

Główną zaletą w porównaniu ze zwykłą wtyczką jest odporność na manipulacje. Zwykłą wtyczkę może wyłączyć każdy użytkownik z uprawnieniami administratora, a w razie przejęcia danych logowania można ją usunąć. Mu-pluginu nie.

Użyj mu-pluginu, gdy:

  • Kod musi działać nawet wtedy, gdy wszystkie zwykłe wtyczki są wyłączone (przekierowanie na tryb konserwacji, nagłówek bezpieczeństwa, reguła wymuszająca HTTPS)
  • Rejestrujesz akcje i filtry WP STAGING, które muszą załadować się przed inicjalizacją samej wtyczki
  • Zarządzasz wieloma witrynami WordPress i chcesz wdrożyć zachowanie specyficzne dla danej strony poza wtyczkami objętymi kontrolą wersji
  • Chcesz zastosować ustawienia PHP w czasie działania (takie jak memory_limit) na wczesnym etapie obsługi żądania

Użyj zwykłej wtyczki, gdy:

  • Właściciel strony lub deweloper powinien móc włączać i wyłączać daną funkcję
  • Funkcjonalność jest dostarczana jako instalowalny produkt z automatycznymi aktualizacjami
  • Tworzysz coś, co inne wtyczki wykrywają za pomocą is_plugin_active()

Jak stworzyć mu-plugin WordPress

Krok 1: uzyskaj dostęp do plików swojej strony

Połącz się ze swoją stroną przez FTP, SFTP lub menedżer plików dostawcy hostingu.

Krok 2: odszukaj lub utwórz katalog mu-plugins

Przejdź do katalogu wp-content/. Poszukaj folderu mu-plugins/. Jeśli nie istnieje, utwórz go. WordPress natychmiast zacznie ładować pliki PHP z tego katalogu, bez żadnej dodatkowej konfiguracji.

Krok 3: utwórz plik swojej wtyczki

Utwórz nowy plik PHP, na przykład my-mu-plugin.php. W nazwie pliku używaj małych liter i myślników (bez spacji). Nazwa pliku pojawia się w Wtyczki → Wtyczki obowiązkowe w panelu WordPressa, więc wybierz opisową nazwę.

Krok 4: dodaj nagłówek wtyczki i swój kod

Każdy mu-plugin potrzebuje na górze komentarza z nagłówkiem wtyczki, tak samo jak zwykła wtyczka. Poniżej znajduje się minimalna struktura:

PHP
<?php
/*
Plugin Name: My Custom Mu-Plugin
Description: A custom must-use plugin to enhance my WordPress site.
Version: 1.0
Author: Mickey Mouse
*/

// Your custom code goes here

Krok 5: prześlij swój mu-plugin

Wgraj plik .php do katalogu wp-content/mu-plugins/ na swoim serwerze.

Krok 6: zweryfikuj aktywację

Nie ma kroku aktywacji. Otwórz Wtyczki → Wtyczki obowiązkowe w panelu WordPressa, aby potwierdzić, że plik został załadowany. Jeśli się nie pojawia, sprawdź, czy plik znajduje się bezpośrednio w mu-plugins/ (a nie w podkatalogu).

Przykładowy mu-plugin: niestandardowy tekst stopki admina

Oto kompletny, działający przykład, który zmienia tekst stopki wyświetlany na dole każdego ekranu administracyjnego WordPressa:

PHP
<?php
/*
Plugin Name: Custom Admin Footer
Description: Changes the footer text in the WordPress admin area.
Version: 1.0
Author: Your Name
*/

add_filter('admin_footer_text', function () {
    echo 'Customized by Tony Stark - Powered by WordPress';
});

Najczęstsze zastosowania mu-pluginów

To wzorce, które najczęściej pojawiają się w zgłoszeniach do wsparcia WP STAGING oraz na forach deweloperskich:

1. Wymuszenie logowania debugowania bez edycji wp-config.php

<?php
/*
Plugin Name: Enable Debug Log
*/
if ( ! defined( 'WP_DEBUG' ) ) {
    define( 'WP_DEBUG', true );
}
if ( ! defined( 'WP_DEBUG_LOG' ) ) {
    define( 'WP_DEBUG_LOG', true );
}
if ( ! defined( 'WP_DEBUG_DISPLAY' ) ) {
    define( 'WP_DEBUG_DISPLAY', false );
}

To przydatne w środowiskach stagingowych lub deweloperskich, gdzie chcesz mieć aktywne logowanie bez ruszania produkcyjnego pliku wp-config.php. Pełny proces debugowania opisuje Enable WordPress Debug Log Mode.

2. Zwiększenie limitu pamięci PHP

Dyrektywę ini memory_limit można zmienić w czasie działania za pomocą ini_set(), co czyni mu-plugin czystym miejscem do zastosowania jej przed załadowaniem zwykłych wtyczek:

<?php
/*
Plugin Name: Increase Memory Limit
*/
@ini_set( 'memory_limit', '256M' );

Uwaga: niektóre ustawienia PHP są ustalone na poziomie serwera i nie można ich zmienić w czasie działania za pomocą ini_set(). Pełne zestawienie tego, które dyrektywy przyjmują zmiany w czasie działania, znajdziesz pod adresem php.net/manual/en/ini.list.php.

3. Kod filtrów WP STAGING

WP STAGING udostępnia udokumentowane akcje i filtry służące do kontrolowania działania kopii zapasowych i stagingu. Ponieważ muszą one załadować się przed inicjalizacją samego WP STAGING, mu-plugin jest właściwym miejscem, aby je zarejestrować. Umieść dowolne wywołania add_filter() lub add_action() w pliku mu-pluginu, a będą zawsze obecne, niezależnie od kolejności aktywacji wtyczek. Wszystkie dostępne hooki znajdziesz w dokumentacji akcji i filtrów WP STAGING, do której odnośnik znajduje się w sekcji Powiązane artykuły poniżej.

4. Wymuszone przekierowanie na HTTPS

<?php
/*
Plugin Name: Force HTTPS
*/
add_action( 'template_redirect', function () {
    if ( ! is_ssl() ) {
        wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
        exit;
    }
} );

5. Wyłączenie XML-RPC

<?php
/*
Plugin Name: Disable XML-RPC
*/
add_filter( 'xmlrpc_enabled', '__return_false' );

Ograniczenia i pułapki

Zanim zdecydujesz się na mu-plugin, warto poznać kilka zachowań:

Brak hooka dezaktywacji i deinstalacji. WordPress nigdy nie wywołuje deactivate_{plugin} ani uninstall_{plugin} dla mu-pluginów. Jeśli Twoja wtyczka tworzy opcje, niestandardowe tabele lub zaplanowane zdarzenia cron, musisz je uprzątnąć ręcznie: usuń plik, a następnie samodzielnie skasuj zapisane dane.

Ładowanie z podkatalogu wymaga pliku ładującego. WordPress ładuje wyłącznie pliki PHP znajdujące się bezpośrednio w wp-content/mu-plugins/. Jeśli umieścisz kod w podkatalogu (na przykład mu-plugins/my-plugin/my-plugin.php), WordPress go nie wykryje. Standardowy wzorzec to utworzenie w katalogu głównym mu-plugins/ cienkiego pliku ładującego, który wywołuje require_once na pliku wewnątrz podkatalogu.

Zachowanie w trybie multisite. W sieci multisite WordPressa mu-pluginy ładują się na każdej witrynie przy każdym żądaniu. Nie ma przełącznika dla poszczególnych witryn. Jeśli chcesz ograniczyć działanie do konkretnej witryny w sieci, użyj wewnątrz wtyczki is_main_site() lub get_current_blog_id().

Kolejność ładowania. Mu-pluginy ładują się w rosnącej kolejności alfabetycznej według nazwy pliku, przed każdą wtyczką z wp-content/plugins/. Jeśli kolejność między Twoimi mu-pluginami ma znaczenie, dodaj przedrostki do nazw plików: 00-runs-first.php, 10-runs-second.php.

Widoczność w panelu administracyjnym. Mu-pluginy pojawiają się w Wtyczki → Wtyczki obowiązkowe, ale nie pokazują żadnych szczegółów, o ile nagłówek wtyczki nie zawiera Plugin Name, Description i Version. Zawsze dołączaj nagłówek; znacznie przyspiesza to diagnozę, gdy coś pójdzie nie tak.

Brak mechanizmu aktualizacji. WordPress nie ma wbudowanego sposobu na powiadamianie o aktualizacjach mu-pluginów ani na ich aktualizowanie. Jeśli adaptujesz kod innej firmy na potrzeby mu-pluginu, sam odpowiadasz za śledzenie aktualizacji i ich ręczne wdrażanie. W przypadku mu-pluginów rozwijanych wewnętrznie nie stanowi to problemu, ale warto o tym pamiętać, jeśli rozważasz przekształcenie wtyczki społecznościowej w mu-plugin.

Gdzie powinien trafić ten kod?

Scenariusz Najlepsza lokalizacja
Stała PHP lub define() wp-config.php
Reguła przepisywania na serwerze .htaccess
Limit pamięci lub czasu wykonania PHP .htaccess (przez php_value) lub php.ini
Kod używający funkcji WordPressa, który musi zawsze działać mu-plugin w wp-content/mu-plugins/
Opcjonalna funkcja kontrolowana przez właściciela strony Zwykła wtyczka w wp-content/plugins/
Zmiany wyjścia lub stylów specyficzne dla motywu functions.php motywu potomnego

Przydatna reguła praktyczna: jeśli Twój kod wywołuje jakąkolwiek funkcję WordPressa (add_filter, get_option, wp_redirect itd.), umieść go w mu-pluginie. Jeśli jest to zwykłe PHP define() lub poprawka, która musi zadziałać, zanim WordPress wystartuje, właściwym miejscem jest wp-config.php.

Podsumowanie

Mu-plugin to właściwe narzędzie dla kodu, który musi zawsze działać i nie może zostać przypadkowo wyłączony. Konfiguracja zajmuje kilka minut: utwórz wp-content/mu-plugins/, dodaj plik .php z nagłówkiem wtyczki, a resztą zajmie się WordPress.

Jeśli tworzysz lub testujesz własny kod mu-pluginu, zalecamy sprawdzenie go w środowisku stagingowym przed wdrożeniem na produkcję. WP STAGING pozwala w prosty sposób sklonować witrynę produkcyjną i potwierdzić, że mu-plugin działa zgodnie z oczekiwaniami, zanim zmiany trafią na żywo.

Powiązane artykuły

Rene Hermenau

Autor: Rene Hermenau

O autorze: René Hermenau jest założycielem WP STAGING. Zajmuje się kopiami zapasowymi WordPressa, środowiskami stagingowymi, migracjami, obsługą baz danych oraz bezpiecznymi procesami wdrażania.