Własna sekcja – Ustawienia w praktyce – Settings API (część 7)

Otóż to. W poprzednich częściach kursu, nauczyliśmy się dopisywać nasze pola ustawień do istniejących stron i sekcji na nich. Ale co zrobić, gdy któreś z naszych ustawień w ogóle nie pasuje do istniejących sekcji? Musimy stworzyć swoją sekcję!

Na szczęście jest to jeszcze łatwiejsze, niż dodawanie własnych pól. Brzmi niewiarygodnie… chyba? Tak mi się zdawało, jak sam się tego uczyłem. W końcu sekcja, „naczynie” na pola a tu łatwiej? Jak to tak? Ano, łatwiej.

Do dodawania własnej sekcji służy funkcja add_settings_section. Przeanalizujmy sobie jej parametry:

$id to identyfikator naszej sekcji. Pamiętacie np. default, post_via_email czy avatars z poprzedniej części? To właśnie były identyfikatory sekcji.
$title to nic innego jak tytuł naszej sekcji
$callback a tutaj możemy wstawić choćby funkcję anonimową i wyświetlić opis sekcji, żeby pokazać użytkownikowi o co w ogóle z naszymi polami chodzi.
$page identyfikator strony do której dodamy naszą sekcję.

Jeszcze z uwag – do sekcji możemy w ogóle nie dodawać pól i od tego właśnie zaczniemy. Podczepimy się pod stronę „Pisanie”, bo tak, ale podczepić się możemy pod dowolną stronę z zastrzeżeniami, że np. „misc” czy „privacy” nie zadziała (pisałem o tym w notatce w poprzedniej części). I zaczniemy z „czystym kontem”, aby poprzednie ustawienia nie „wchodziły nam w drogę”.

Wyszło nam coś takiego:

A jak to wygląda w praktyce?

Sekcja Settings API WordPress w praktyce

Oczywiście zamieszczanie takiej pustej sekcji mija się nieco z celem, prawda? Chyba, że chcemy rozbudować pomoc WordPress na którejś stronie… Dodajmy więc jakieś pola. Tym razem dodamy pola nieco inne niż dotychczas, aby pokazać, że też takie możemy budować.

No, to zaczynamy.

Własne pola w sekcji

Co postanowiłem Wam pokazać? Ano, postarałem się zrobić taki misz-masz, żeby każdy wybrał dla siebie coś ciekawego.

  1. Pierwszą opcją będzie „Do czego dodawać?”. To nam pozwoli pokazać dwie rzeczy. Pierwszą jest użycie przycisków typu „radio”. Drugą – dodanie dodatkowego opisu tak, żeby wyglądał jak na innych stronach z ustawieniami.
  2. Drugą opcją będzie „Gdzie dodawać?” co pozwoli na wybór (pola typu „checkbox”) czy dodajemy z przodu, czy z tyłu, czy z przodu i tyłu. Dodatkowo, gdy któraś z tych opcji będzie zaznaczona, pojawi się pole tekstowe, gdzie wpiszemy co dodawać z przodu a co z tyłu.
  3. Ostatnią opcją będzie wybór (pole typu „select”) do której kategorii dodawać nasze dodatki.

Za chwilę opiszę dokładnie co robię i dlaczego a póki co, działający kod źródłowy:

Teraz, poglądowo, jak to wygląda w działaniu:

Własne pola, własna sekcja, Settings API WordPress

Skoro już wszystko wiecie, to teraz

Jak to działa?

Ano, jak widzicie, nie jest to takie trudne, świetnie wygląda w panelu WordPress, jakby sami twórcy to tam wsadzili. A pozwala nam na pełną kontrolę. Ale od początku:

W liniach 16-18 tworzymy swoją sekcję. Nadajemy jej ID automatic_titles i wyświetlamy opis. W zmiennej $args dostajemy parę informacji, np. tytuł sekcji, ale że jego generowaniem zajmuje się WordPress, nie musimy się tym przejmować.

W liniach 20-36 tworzymy sobie pierwszą opcję, którą są przyciski typu „radio”. Tutaj też nie ma nic niezwykłego, trochę HTMLu, sprawdzanie opcji i to w zasadzie wszystko. To samo co „text”, tylko nieco bardziej rozbudowane w strukturze. Kod sam się tłumaczy.

W liniach 38-72 dzieje się dużo więcej, sporo ciekawszych rzeczy. Po pierwsze, definiujemy sobie pole at_add_position. To pole to tablica – i to już jest pierwsza zmiana. Jak do tej tablicy przypisujemy wartości, widać w liniach 53 i 61, bo to tablica dwuelementowa. Dzięki zastosowaniu indeksu [0] i [1], konkretna wartość zawsze jest w konkretnym miejscu. I to by nie było nic niezwykłego, poza zaprezentowaniem tablicy, gdyby nie linie 55-58 i 63-66.

Zobaczymy tam, że obsługujemy INNE pola w funkcji, która w teorii odpowiada za pole at_add_position. We wspomnianych liniach obsługujemy at_add_begin_text oraz at_add_end_text co pokazuje nam, że możemy w funkcjach mieszać zmienne, bez żadnej szkody dla kodu.

Kolejna niezwykła rzecz to linie 71-72, gdzie rejestrujemy te dodatkowe pola. Zwróćcie proszę uwagę na to, że dla tych pól brakuje wywołania funkcji add_settings_field! To bardzo ważne, aby pamiętać, że ta funkcja wcale nie jest obowiązkowa. Ona daje nam miejsce, pozwala renderować pole, ale wcale nie musimy tego robić. Wystarczy, że pole właściwie zarejestrujemy, WordPress i tak je obsłuży!

Ostatnią „inną” rzeczą tutaj, są linie 39-47. W tych liniach dodajemy kod JavaScript (korzystając z jQuery, które jest ładowane na stronach z opcjami, nie musimy się o to martwić), który zapewnia nam mechanizm chowania/pokazywania pól tekstowych w zależności od stanu pól typu „checkbox”. Nie jest to skomplikowane, ale zaznaczam, że można tak zrobić.

W liniach 74-97 rejestrujemy ostatnie pole, tym razem listę rozwijaną (select). To też jest dosyć trywialne, pozostawiam to jako przykład, jak to zrobić.

Teraz już wiecie, jak dodawać swoje pola do istniejących sekcji, wiecie też, jak dodawać własne sekcje do istniejących stron. Mam nadzieję, że te siedem części… ale, ale, ale. Nie powinienem pisać podsumowania, bo przecież nie skończyliśmy!