Functions.php w WordPress – co to jest?

Plik functions.php to specjalny plik PHP traktowany przez WordPress jak wbudowana w motyw wtyczka. Ładuje się automatycznie przy każdym uruchomieniu strony — o ile dany motyw jest aktywny.

Jak działa functions.php

WordPress wczytuje ten plik na wczesnym etapie inicjalizacji strony, po załadowaniu wtyczek, ale przed wyrenderowaniem szablonów. Kod zawarty w functions.php może rejestrować hooki, definiować funkcje pomocnicze i modyfikować działanie WordPressa lub aktywnego motywu.

Plik jest powiązany z konkretnym motywem — jeśli zmienisz motyw, kod w functions.php poprzedniego motywu przestaje działać.

Co zwykle umieszcza się w functions.php

Plik ten jest właściwym miejscem na kod ściśle powiązany z wyglądem i funkcjami aktywnego motywu:

  • rejestrowanie nawigacji przez register_nav_menus()
  • deklarowanie obsługi miniaturek wpisów przez add_theme_support('post-thumbnails')
  • rejestrowanie obszarów widżetów przez register_sidebar()
  • kolejkowanie stylów i skryptów przez wp_enqueue_scripts
  • definiowanie niestandardowych rozmiarów obrazów przez add_image_size()

Dobrze jest też tu rejestrować hooki specyficzne dla motywu — filtry i akcje, które mają sens tylko przy konkretnym layoucie.

Kiedy functions.php to nieodpowiednie miejsce

Plik functions.php nie jest właściwą lokalizacją dla kodu, który powinien działać niezależnie od motywu.

Integracje z zewnętrznymi API. Jeśli kod łączy stronę z CRM, systemem mailowym czy zewnętrznym serwisem, powinien być we wtyczce. Przy zmianie motywu taka integracja nie powinna znikać.

Niestandardowe typy treści i taksonomie. CPT zarejestrowany w functions.php przestaje być dostępny po zmianie motywu, bo nowy motyw nie rejestruje już tego typu treści. Sama zawartość zwykle zostaje w bazie danych, ale może zniknąć z panelu i frontu do czasu ponownego zarejestrowania CPT. Dlatego typy treści i taksonomie lepiej umieszczać w dedykowanej wtyczce.

Rozbudowana logika biznesowa. Im więcej kodu trafia do jednego pliku, tym trudniej go utrzymać i debugować. Duże projekty często dzielą funkcje na osobne pliki, includowane z functions.php.

Szybkość kodu zależy od jego jakości, nie od lokalizacji. Ten sam kod w functions.php i w dedykowanej wtyczce wykonuje się z takim samym narzutem dla interpretera PHP.

Child theme — bezpieczna modyfikacja

Zmiany w pliku functions.php motywu głównego (parent theme) przepadają przy aktualizacji motywu przez jego dewelopera.

Rozwiązaniem jest motyw potomny (child theme). WordPress ładuje plik functions.php motywu potomnego tuż przed plikiem nadrzędnego — oba działają jednocześnie, nie zamiast siebie. Kod w child theme przeżywa aktualizacje motywu głównego.

Jeśli nie chcesz tworzyć child theme, wtyczki zarządzające fragmentami kodu (np. Code Snippets) pozwalają umieszczać kod przez panel admina, bez ruszania pliku functions.php. Więcej o motywach: Motyw w WordPress.

Unikalne nazwy funkcji

PHP zgłosi błąd krytyczny, jeśli zadeklarujesz funkcję o nazwie już istniejącej — w rdzeniu WordPressa, innej wtyczce lub motywie.

Dlatego funkcje w functions.php powinny mieć unikalny prefiks, np. mojafirma_get_menu() zamiast get_menu(). Alternatywą są przestrzenie nazw PHP (namespaces), dostępne od PHP 5.3, które grupują kod i chronią przed kolizjami.

Warto też owijać funkcje w sprawdzenie if ( ! function_exists('nazwa') ) — zabezpiecza to przed błędem przy aktywnych motywach, które mogą deklarować tę samą funkcję.

Stałe w wp-config.php a functions.php

Plik functions.php nie jest właściwym miejscem na stałe konfiguracyjne WordPressa takie jak WP_DEBUG czy WP_MEMORY_LIMIT. Te stałe definiuje się w pliku wp-config.php, który jest wczytywany wcześniej. Więcej o stałych: Stałe systemowe WordPress.