publikacja: 9 stycznia 2012, autor: , komentarzy 19 https://wpninja.pl/artykuly/kiedy-warto-zastapic-plik-functions-php-wtyczka-funkcjonalna-i-jak-to-zrobic/

Kiedy warto zastąpić plik functions.php wtyczką funkcjonalną i jak to zrobić?

Kiedy warto zastąpić plik functions.php wtyczką funkcjonalną i jak to zrobić?

Funkcjonalności WordPressa możemy rozszerzyć na dwa sposoby - instalując wtyczkę lub dodając kod do pliku functions.php. Drugie podejście ma niestety jedną, zasadniczą wadę - nasze modyfikacje zostaną utracone, gdy zmienimy szablon na inny. Można temu zapobiec, tworząc własną wtyczkę funkcjonalną.

Plik functions.php a wtyczka funkcjonalna

Wprawdzie plik functions.php nie jest konieczny do działania szablonu, ale w praktyce trudno zleźć skórkę, która by go nie zawierała. Plik ten funkcjonuje tak jak wtyczka, a dla działania kodu nie ma znaczenia czy znajduje się w nim czy we wtyczce. Różnica polega na tym, że plik functions.php jest związany bezpośrednio z szablonem, w którym się znajduje, w związku z czym uruchamiany jest tylko, gdy dany szablon jest aktywny. Wtyczka natomiast działa jeśli tylko jest włączona, niezależnie od tego, z jakiego szablonu akurat korzystamy.

Celem tego artykułu nie jest przekonanie Ciebie, że nie potrzebujesz już pliku functions.php. Tak naprawdę zarówno wtyczka funkcjonalna jak i plik functions.php mają swoją rację bytu. Chcę Cię jednak zachęcić do oddzielenia kodu związanego z wyglądem szablonu od kodu odpowiedzialnego za funkcjonalność bloga. Dzięki temu unikniesz problemów i oszczędzisz sobie pracy przy zmianie lub aktualizacji szablonu.

Co powinno się znaleźć we wtyczce funkcjonalnej a co w pliku functions.php?

Aby zdecydować, gdzie powinien trafić dany fragment kodu, odpowiedz sobie na jedno pytanie. Czy dany kod dodaje do Twojego bloga funkcjonalność, którą chciałbś zachować również przy zmianie szablonu? Jeśli tak, to kod powinien trafić do wtyczki, a jeśli nie, do pliku functions.php.

Przykładowo, do wtyczki należało by przenieść kod związany z:

Co pozostawić w pliku functions.php?

  • definicje rozmiarów miniatur,
  • definicje obszarów sidebar,
  • definicje menu,

oraz wszystko to, co związane jest z wyglądem i poprawnym wyświetlaniem danego szablonu.

Jak stworzyć własną wtyczkę funkcjonalną?

Wbrew pozorom nie jest to nic trudnego i nawet osoby ze znikomą znajomością PHP powinny dać sobie z tym radę. Cała praca zasadniczo polega na kopiowaniu kodu pomiędzy plikiem functions.php a plikiem wtyczki.

Utwórz nowy plik php i wklej na początek poniższy fragment, dzięki któremu WordPress rozpozna go jako wtyczkę. Plik możesz nazwać dowolnie, ale najlepiej aby nazwa nie była całkiem przypadkowa, przykładowo nazwabloga-functions-plugin.php.

<?php
/*
Plugin Name: Wtyczka funkcjonalna bloga MojBlog.pl
Description: Funkcjonalność bloga, niezwiązana z wyglądem.
Version: 0.1
License: GPL
Author: Imię i nazwisko
Author URI: http://mojblog.pl
*/
?>

Teraz wystarczy, że skopiujesz do pliku wtyczki cały kod odpowiedzialny za dodatkową funkcjonalność na Twoim blogu.

Przykładowo, załóżmy że w pliku functions.php masz zdefiniowany:

Zakładając, że zależy nam na zachowaniu tej funkcjonalności również przy zmianie szablonu, całe fragmenty kodu przenosimy do pliku nowo utworzonej wtyczki:

<?php
/*
Plugin Name: Wtyczka funkcjonalna bloga MojBlog.pl
Description: Funkcjonalność bloga, niezwiązana z wyglądem.
Version: 0.1
License: GPL
Author: Imię i nazwisko
Author URI: http://mojblog.pl
*/
 
/**
* własny domyślny awatar
*/
 
add_filter('avatar_defaults', 'custom_avatar');
 
function custom_avatar ($avatars) {
   $custom_avatar_url = get_bloginfo('template_url').'/img/nazwa-pliku.gif';
   $custom_avatar_title = "Nazwa awatara";
   $avatars[$custom_avatar_url] = $custom_avatar_title;
   return $avatars;
}
 
/**
* własny przycisk w wizualnym edytorze
*/
 
add_shortcode('css_button', 'generate_css_button');
 
function generate_css_button($atts, $content = null){
   $result = extract(shortcode_atts(array(
   'to' => '#'
   ), $atts));
   return "<a class='css_button_blue' href='$to'>$content</a>";
}
?>

W ten sam sposób należy postąpić z pozostałym kodem z pliku functions.php kierując się wspomnianą wcześniej zasadą.

Instalacja wtyczki funkcjonalnej

Kiedy już uporasz się z kopiowaniem kodu do pliku wtyczki, pozostaje Ci tylko instalacja.
Tutaj masz dwie opcje.

  • Metoda 1. Katalog wp-content/plugins

    Jest to standardowa procedura, która polega na umieszczeniu pliku wtyczki w katalogu wp-content/plugins, a następnie aktywacji z poziomu panelu administracyjnego.

    Wtyczka umieszczona w katalogu wp-content/plugins

    Wtyczka umieszczona w katalogu wp-content/plugins

    Zapewne do tej pory właśnie w ten sposób postępowałeś ze wszystkimi wtyczkami. Jest jednak jeszcze jeden sposób, o którym warto wspomnieć.

  • Metoda 2. Katalog wp-content/mu-plugins

    Osoby które miały okazję pracować z WordPress w wersji MU (Multi User), zapewne pamiętają katalog mu-plugins, do którego wgrywało się wtyczki, aby automatycznie były aktywne na wszystkich blogach w ramach sieci.

    Jednak nazwa tego katalogu – mu-plugins to skrót od „must use”, a nie „multi user”, jak mogłoby się wydawać. W związku z tym również w pojedynczej instalacji WordPress (od wersji 2.8) można utworzyć taki katalog w folderze wp-content, a w rezultacie wrzucone do niego wtyczki będą działać, bez konieczności aktywacji.

    To rozwiązanie ma również tę zaletę, że eliminuje ryzyko przypadkowego wyłączenia wtyczki, która jest kluczowa dla działania bloga.

    Wracając do naszej wtyczki funkcjonalnej – jeśli nie masz katalogu mu-plugins w swojej instalacji, wystarczy że utworzysz go ręcznie w folderze wp-content, a następne skopiujesz tam plik wtyczki. Jeśli teraz wejdziesz do panelu administracyjnego, oto co powinieneś zobaczyć w sekcji „Wtyczki”:

    Wtyczka umieszczona w katalogu wp-content/mu-plugins

    Wtyczka umieszczona w katalogu wp-content/mu-plugins

    Tak jak wspominałam, w tym wypadku nie ma konieczności aktywacji wtyczki. Oznacza to jednak również, że nie ma możliwości jej wyłączenia – aby przestała działać, trzeba ją fizycznie usunąć z katalogu.

    Warto również wiedzieć, że do katalogu mu-pugins można wrzucać jedynie pojedyncze pliki (tak jak w naszym przypadku, gdzie cała wtyczka znajduje się w jednym pliku).

    Więcej informacji na temat roli katalogu mu-plugins znajdziesz w oficjalnej dokumentacji.

Co dalej?

Opisaną w artykule metodę można zgeneralizować i zamiast jednej wtyczki funkcjonalnej stworzyć ich kilka, wydzielając poszczególne funkcje. Na pewno warto o tym pomyśleć, gdy dodajemy funkcjonalność, z której korzystamy często również na innych stronach.

Przykładowo, jeśli w nowo tworzonych serwisach powtarzamy ten sam standardowy zestaw modyfikacji panelu administracyjnego (np. ukrywanie widgetów w kokpice, ukrywanie powiadomień o aktualizacji, modyfikacje tekstu w stopce itd.), warto zastanowić się, czy nie zasługuje on na odrębną wtyczkę.

Postępując w ten sposób, można znacznie przyspieszyć i ułatwić sobie pracę nad kolejnymi projektami.

Podsumowanie

Jednym z powodów, dla którego rozszerzanie funkcjonalności bloga poprzez dodawanie kodu do pliku functions.php jest tak popularne, jest prostota tego rozwiązania. Mam jednak nadzieję, że po przeczytaniu tego artykułu, będziesz świadomie decydował, gdzie powinien trafić określony fragment kodu.

Dodaj własny komentarz