
W tym wpisie zajmiemy się tworzeniem widget`ów i sidebar`ów. Wyjaśnimy czym one są, jak się je programuje i jakie dają możliwości modyfikacji szablonu z panelu administratora. Zostanie też przedstawiony plik functions.php, bardzo istotny element funkcjonalności WordPress. Zapraszam do lektury!
~ Rafał, Learn2Code
Widgety i Sidebary
Przekładając mockup na kod, można zauważyć co najmniej dwa miejsca, które wymagają możliwości edycji z panelu administratora (czy potrafisz zlokalizować więcej takich miejsc?).
Sekcje te nie są połączone z żadną stroną i żadnym wpisem. Są to całkowicie odrębne obszary, które musimy zdefiniować w kodzie. Następnie w panelu administratora będziemy umieszczać w nich mniejsze elementy (komponenty).
Sidebar
To obszary to tzw. sidebars. Sidebar, czyli panel boczny. Na rysunku wyznaczone żółtym obramowaniem. Nazwa jest zaszłością historyczną. Kiedyś standardem w projektowaniu stron było dzielenie jej na dwie główne części:
1. mniejszą część (panel boczny) w której zawierało się najczęściej menu i znajdowało miejsce na widgety,
2. część główną, która pokrywała większą część ekranu.
Obecnie jednak projektanci stron nie trzymają się już tej zasady i sidebar może oznacza tylko miejsca, w którym mogą się znaleźć widgety. Lokalizacja na stronie jest dowolna.
Widget
Widget to po prostu mniejszy element wizualny (czasami nazywany komponentem), umieszczany w wyszczególnionym miejscu na stronie, wyznaczonym przez sidebar. Na rysunku widgety wyróżnione są zielonym obramowaniem. Znajdują się w nich najczęściej uzupełniające informacje w postaci grafik lub tekstów, pomocnicze menu, banery.

Sidebary (kolor żółty) i widgety (kolor zielony) zostały zaznaczone na załączonym rysunku strony. Obszary przez nie wyznaczone i poszczególne elementy należy zaprogramować, a następnie umieścić w kodzie szablonu strony przy użyciu znaczników szablonu (template tags). Programista ma pełną dowolność w określeniu ich ilości i formie, w jakiej będą wyświetlane.
Plik functions.php
Sidebary będziemy dodawać pojedynczo. Odbywa się to wg następującego schematu:
- W folderze szablonu należy dodać nowy plik o nazwie
functions.php.
Krok ten należy wykonać tylko jeden raz. - W pliku
functions.php
należy dodać funkcję, która na podstawie zawartego w niej kodu wygeneruje strukturę sidebar`ów. Funkcja będzie wywoływana automatycznie przez WordPress. - Następnie należy zaktualizować strukturę strony (pliki
index.php
,header.php
ifooter.php
). Dodamy w nich kod ładujący przed chwilą wygenerowane sidebar`y poprzez użycie w wybranych miejscach funkcji dynamic_sidebar.
Jak widać, cały nowy kod powstaje w pliku
functions.php
. Co więcej, wszystkie dodatkowe funkcjonalności, które chcemy zaprogramować dla naszego szablonu takie jak: utworzenie widgetów, funkcję zapisującą użytkownika do bazy danych czy unikalny sposób wyświetlania informacji na stronie należy umieścić właśnie w tym pliku. Jest to plik o specjalny przeznaczeniu w architekturze WordPress. Jego rola jest bardzo istotna. W nim też zapisane są również ustawienia szablonu oraz dynamiczne ładowanie stylów oraz plików zawierających kod JavaScript.
Przyjrzyjmy się jak ten proces wygląda w praktyce na przykładzie sekcji stopki, czyli footer sidebar. Poniżej kod, który powinien się znaleźć w pliku functions.php
.
functions.php
Przeanalizujmy kod, żeby dobrze go zrozumieć. Przyjrzyjmy się najważniejszym elementom.
add_action( 'widgets_init', 'landing_sidebars' );
function landing_sidebars() {..........}
Sidebar`y są generowane w funkcji landing_sidebar()
(nazwa tej funkcji jest dowolna). Aby poinformować WordPress, że w momencie inicjalizacji widgetów, to właśnie tę funkcję należy uruchomić automatycznie i przygotować strukturę HTML do ich wyświetlania, należy tuż przed deklaracją użyć funkcji add_action( 'widgets_init', 'landing_sidebars' );
. Jest to niezwykle ważne. add_action( )
jest funkcją WordPress i informuje go, że gdy w trakcie ładowania strony rozpocznie się etap ‘widgets_init’, to wszystkie informacje, które potrzebuje, żeby dobrze je zainicjalizować znajdują się w funkcji o nazwie landing_sidebars.
...
register_sidebar(
array(
'id' => 'stopka-1',
'name' => __( 'Stopka 1' ),
'description' => __( 'Widget zawierający zawartoś lewej kolumny stopki.' ),
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
)
);
...
register_sidebar()
to funkcja WordPress odpowiedzialna za stworzenie sidebar`u na podstawie informacji w tablicy:
- nadanego, unikalnego identyfikatora, dzięki któremu będzie można się do niego odwoływać w innych miejscach aplikacji,
- nazwy i opisu, które będą pomocne przy dodawaniu widgetów w panelu administratora
- informacji dotyczących, w jaki sposób sidebar ma się wyświetlać na stronie, czyli jego kod HTML. Jak widać w załączonym kodzie, ten sidebar o nazwie Stopka 1, będzie występował jako element blokowy DIV, z przypisanym id o wartości stopka-1 i klasą widget. Jego tytuł zaś będzie wyświetlany w postaci nagłówka o wielkości h3, z przypisaną klasą widget-title.
Pisząc kod, zdecydowałem, że na stronie stopka posiadała dwie kolumny. Dlatego dwa razy używam funkcji register_sidebar()
. W obu kolumnach będę mógł już niedługo dodawać widgety.
footer.php
W tym momencie mamy już przygotowaną konfigurację sidebar`ów, ale nie dodaliśmy jeszcze w kodzie żadnej informacji, gdzie mają się one wyświetlać. W tym przypadku, chcemy aby znalazły się one w stopce strony. Dlatego należy zmodyfikować plik footer.php
, aby uwzględnić powyższe zmiany.
Przede wszystkim, zdecydowałem, że chcę, aby stopka miała dwie kolumny. Dlatego przygotowałem kod html, w którym dzięki klasom .col z biblioteki Bootstrap, dwa elementy blokowe będą zajmowały dokładnie 50% dostępnej im przestrzeni. W każdej kolumnie zaś ładuje, stosując funkcję WordPress <?php dynamic_sidebar(...); ?>
, zaprogramowany w pliku functions.php
sidebar, podając jego unikalne id. Przyjrzyjmy się szczegółowo dodanemu kodowi.
<?php
$has_footer_sidebar_1 = is_active_sidebar( 'stopka-1' );
$has_footer_sidebar_2 = is_active_sidebar( 'stopka-2' );
?>
Używam funkcji WordPress is_active_sidebar( '...' )
, aby po kolei sprawdzić, czy dodane w functions.php
sidebar`y poprawnie działają i dobrze się załadowały. Funkcja zwraca true lub false, a jej wynik zapisuje do zmiennej.
<?php if ($has_footer_sidebar_1) { ?>
<div class="col">
<?php dynamic_sidebar( 'stopka-1' ); ?>
</div>
<?php } ?>
Jeśli funkcja is_active_sidebar( 'stopka-1' )
zwróciła true, czyli sidebar o identyfikatorze stopka-1 został poprawnie utworzony, to chcę, aby został załadowany w kolumnie (div z klasą col). W tym celu wykorzystuje funkcję WordPress dynamic_sidebar( 'stopka-1' )
. Funkcja ta, na podstawie konfiguracji zamieszczonej dla elementu o identyfikatorze stopka-1, wygeneruje kod HTML. Jeśli zostaną dodane w panelu administratora jakieś widgety, do sidebar`u o tym id, to zostaną one również tutaj załadowane.
To samo wykonuje dla stopka-2.
Widgety
Widgety dodaje się z panelu administratora.
Należy z menu głównego w panelu, wybrać pozycję Wygląd -> Widgety.
Na stronie z listą widgetów powinny się pojawić wszystkie utworzone w szablonie (czyli dodane w pliku functions.php
) sidebar`y.
Jak widać, wszystko działa poprawnie. Pojawiły się dwa pola o nazwach Stopka 1 i Stopka 2, wraz z odpowiadającymi im opisami. Dokładnie tak, jak zapisaliśmy to wcześniej przy ich rejestrowaniu.
Teraz Do każdego z sidebar`ów można teraz dodać dowolną liczbę widgetów. Ja zdecydowałem się na umieszczenie w obu kolumnach stopki widgetów tekstowych, tak jak na załączonym zrzucie ekranu.
Po dokonaniu zmian i dodaniu własnych treści, można wrócić do widoku strony, aby sprawdzić czy wszystko działa jak należy. Jak widać, w stopce wyświetla się przed chwilą dodany tekst!

Na przykładzie stopki poznaliśmy mechanizm dodawania widgetów w szablonie i przekonaliśmy się, że działa. Proponuję, aby w ramach ćwiczenia, samodzielnie dodać pozostałe widgety i sidebary. Ja zidentyfikowałem co najmniej jedną możliwość. A ty? Spróbuj wykorzystać powyższy tekst do samodzielnego utworzenia nowych elementów!
Pełen kod do tego wpisu znajduje się na GitHubie pod adresem: https://github.com/01float/l2c-wordpress-basic-theme . Zachęcam do jego sprawdzenia i porównania swojego kodu, z moją propozycją. Zawarłem w nim również sidebar feature listy.
W kolejnej, ostatniej już części, zajmiemy się wysyłaniem i obsługą formularza. Zapraszam do lektury!