# Must Use Plugins (MU-PLUGINS) i&nbsp;Zamienniki (Drop-ins) w&nbsp;WordPress

Dziś odpowiedź na dwa proste pytania – Jak działają Wtyczki wymuszone (*Must Use Plugins*) oraz czym są Zamienniki tzw *Drop-ins* w WordPress.

## **Czym są wtyczki Must Use Plugins (MU-PLUGINS)?**

Wtyczki MU są dostępne jako dodatkowa funkcjonalność od WordPress 2.8 – jednak mało kto o nich wie lub nie wie jak je używać. Wtyczki MU Plugins są uruchamiane zawsze i niezależnie od tego czy są skonfigurowane w kokpicie czy nie – uruchamiane są w pierwszej kolejności za każdym razem, kiedy ładowana jest strona i kokpit. Nie można ich edytować czy wyłączyć poprzez kokpit – są widoczne jako **Wtyczki wymuszane**.

![](https://jaworowi.cz/wp-content/uploads/2017/02/wtyczki-wymuszone-mu-plugins-wordpress.jpg)

![](https://jaworowi.cz/wp-content/uploads/2017/02/wtyczki-wymuszone-wordpress-must-use-plugins.png)

Must Use plugins, aby działały muszą być ulokowane w odpowiednim folderze – */wp-content/mu-plugins* , jednak można zmienić położenie tego folderu z pomocą zmiennej *WPMU_PLUGIN_DIR* w *wp-config.php*.

`define( 'WPMU_PLUGIN_DIR', WP_CONTENT_DIR . '/mu-plugins' ); // Pełna ścieżka, bez końcowego ukośnika`

Bez odpowiednio napisanego loadera plik z wtyczką musi być umieszczony bezpośrednio w folderze, a nie w podfolderze jak w przypadku zwykłych wtyczek. Przykład loadera wtyczki wymuszanej z podfolderu znajduje się poniżej i można go nazwać dowolnie np. *mu-loader.php*

`require(WPMU_PLUGIN_DIR . '/wtyczka/plik-wtyczki.php');`

Różnica pomiędzy zwykłymi wtyczkami, a wtyczkami wymuszonymi jest taka, że te drugie nie muszą posiadać nagłówków typowych dla normalnych wtyczek – chodź wskazane jest, aby posiadała nazwę i opis, aby w przypadku ich większej ilości wiedzieć za co dana wtyczka odpowiada.

Jeżeli wtyczką wymuszoną modyfikujesz funkcję innej wtyczki lub motywu koniecznie użyj *if function exists* lub *if class_exists*, ale poprawne jest też sprawdzenie czy dana wtyczka jest aktywna. [[Przykłady na GitHub](https://gist.github.com/jaworowicz/3648306ea45913fd60f4ed01458cb22f)]

## **Czym są Zamienniki (Dropins)?**

Wg opisu wewnątrz kokpitu – „*Zamienniki* są zaawansowanymi wtyczkami umieszczanymi w katalogu *wp-content*, które, jeśli są obecne, zastępują domyślne procedury WordPressa w określonych działaniach.”

![](https://jaworowi.cz/wp-content/uploads/2017/02/zamienniki-dropins-wordpress.png)

Niestety zamienników nie ma zbyt wiele, a ich lista zdefiniowana jest w pliku *wp-admin/includes/plugin.php* – część dotyczy zwykłych instalacji, a część działa tylko jeżeli korzystamy z sieci witryn. [[Zobacz kod](https://gist.github.com/jaworowicz/066ffb45b490629686430b3ea3dad6c4)]

Aby zamienniki działały muszą znajdować się w katalogu */wp-content/* i być standardowymi plikami PHP.

### **Lista Zamienników**

![](https://jaworowi.cz/wp-content/uploads/2017/02/dropins-wordpress.png)

- ***advanced-cache.php*** – Zaawansowana wtyczka CACHE działająca ze zmienną WP-CACHE
- ***db.php*** – Własna klasa obsługi bazy danych, uruchamiana zawsze, jeżeli istnieje
- ***db-error.php*** – Własny błąd połączenia z bazą danych ([więcej tutaj](https://jaworowi.cz/wordpress-zamiennik-dnia-jak-ustawi-wasny-bd-poczenia-baz-danych-2970.php))
- ***install.php*** – Własny skrypt instalacyjny
- ***maintenance.php*** – Własny komunikat przerwy konserwacyjnej
- ***object-cache.php*** – przydatne szczególnie przy dużych stronach, ogranicza zapytania do bazy danych zapisując odpowiedzi z bazy na dysk i pobiera dane z niego, a nie poprzez ponowne połączenia z bazą.
- ***sunrise.php*** – Używana tylko w multisite i ładowana w pierwszej kolejności, wymaga dodania parametru do WP-CONFIG i przydaje się m.in. do mapowania domen w WordPress MS.
- ***blog-deleted.php*** – Własny błąd z informacją o usunięciu bloga z Sieci witryn
- ***blog-inactive.php*** – Własny błąd z informacją o nieaktywnej stronie w sieci witryn
- ***blog-suspended.php*** – Własny błąd z informacją o zawieszeniu bloga lub strony w Sieci witryn WordPress MultiSite
