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
.phpz nagłówkiem wtyczki w kataloguwp-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
/*
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
/*
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.