Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

📋 Pełna ściąga po WordPress

📋 Pełna ściąga po WordPress

Otworzyli Państwo functions.php i zapomnieli, jak podpiąć sidebar? To zdarza się każdemu, kto ręcznie koduje motyw WordPress. Potrzebna jest jedna strona pod ręką, a nie dziesięć zakładek developer.wordpress.org.

Zebrano tu fundamenty tworzenia motywów dla WordPress: 13 plików szablonu i hierarchia ich wyboru, podstawowa Pętla, znaczniki dołączające i parametry bloginfo(), a dalej hooki i filtry, znaczniki warunkowe, podpinanie skryptów, shortkody, WP_Query, escapowanie danych, REST API oraz polecenia WP-CLI. Wszystkie przykłady kodu są działające. Proszę trzymać tę zakładkę otwartą podczas pracy i sprawdzać na bieżąco.

💡 Szybki przegląd:

  • Proszę zapisać stronę w zakładkach i trzymać ją otwartą w osobnej karcie podczas kodowania motywu.
  • Proszę zacząć od sekcji „Anatomia motywu": utworzyć pliki motywu według listy, zanim zaczną Państwo pisać kod.
  • Proszę skopiować podstawową Pętlę WordPress do index.php i obudować ją znacznikami dołączającymi nagłówek, sidebar i stopkę.
  • Proszę wstawiać znaczniki bloginfo() i get_bloginfo() z tabeli bezpośrednio do szablonów, sprawdzając z kolumną „Co zwraca".
  • Przed publikacją proszę przejść według zasad dla style.css: zwalidować CSS, zminifikować i dodać style wydruku.
  • Dalej na stronie, kompendium: hierarchia szablonów, hooki i filtry, znaczniki warunkowe, podpinanie skryptów, shortkody, WP_Query, escapowanie, REST API i WP-CLI.

Anatomia motywu WordPress

Schemat struktury plików motywu WordPress

Motyw WordPress, to zestaw plików PHP, połączonych wspólną logiką i podporządkowanych hierarchii szablonów. Kluczowy komponent: style.css, odpowiada za wygląd wizualny i jednocześnie służy jako identyfikator motywu w panelu administracyjnym. Fundamentem każdego klasycznego motywu są jednak właśnie szablony PHP: każdy odpowiada za swój obszar strony i jest wywoływany w kolejności określonej przez hierarchię WordPress.

Do stworzenia standardowego motywu potrzebne są następujące pliki, trzynaście sztuk, a każdy obsługuje konkretną strefę witryny:

  • header.php, sekcja <head> i górna część strony: metadane, tytuł witryny, podpięcie style.css, otwierający znacznik <body>.
  • index.php, główny szablon, punkt wejścia. Za pomocą znaczników dołączających zbiera pozostałe pliki w jedną stronę. Jeśli nie ma wyspecjalizowanego szablonu, WordPress przechodzi do index.php.
  • sidebar.php, panel boczny: widgety, kategorie, wyszukiwarka, dodatkowe menu.
  • footer.php, stopka: copyright, linki do mediów społecznościowych, skrypty analityczne, zamykające znaczniki </body></html>.
  • page.php, szablon dla stron (treść statyczna, „O nas", „Kontakt").
  • single.php, szablon pojedynczego wpisu na blogu.
  • comments.php, blok komentarzy i formularz ich dodawania.
  • 404.php, strona błędu 404. Jeśli tego pliku nie ma, WordPress pokazuje standardowy komunikat systemowy, co jest gorsze dla odwiedzającego.
  • search.php, szablon wyników wyszukiwania.
  • searchform.php, formularz wyszukiwania (w klasycznych motywach; współczesne często ograniczają się do widgetu).
  • archive.php, szablon archiwów: kategorie, tagi, archiwa dat.
  • functions.php, funkcjonalne serce motywu: niestandardowe hooki, podpinanie skryptów i stylów, rejestracja menu, obszarów widgetów, niestandardowe typy wpisów. Wszystko, co dodaje motywowi funkcjonalności, znajduje się tutaj.
  • style.css, jedyny NIE-PHP plik na liście, ale bez niego motyw nie istnieje: to właśnie on przechowuje nagłówek motywu i definiuje wygląd witryny.

Można obejść się mniejszą liczbą szablonów, na przykład index.php + style.css już tworzą minimalny motyw. Jednak dla pełnoprawnej witryny lepiej trzymać wszystkie trzynaście: każdy plik jest dostosowany do swojego zadania, a WordPress sam wybiera właściwy według hierarchii. Typowy index.php wygląda tak:

1<?php get_header(); ?>
2
3<!-- Основной контент, включая Цикл -->
4
5<?php get_sidebar(); ?>
6<?php get_footer(); ?>

Przechodzimy dalej, do najważniejszego fragmentu kodu, bez którego nie wyświetli się żaden wpis.

Pętla WordPress

Pętla (The Loop), to centralny mechanizm wyświetlania treści. Bez niej musieliby Państwo ręcznie kodować wyświetlanie każdego posta i każdej strony w szablonie motywu. Pętla robi dokładnie to, co obiecuje nazwa: przechodzi przez wszystkie wpisy, które odpowiadają bieżącemu zapytaniu, i dla każdego stosuje wskazany przez Państwa znacznik HTML/PHP.

Podstawowa składnia Pętli:

1<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
2 <!-- HTML-разметка и теги шаблона для каждой записи -->
3<?php endwhile; endif; ?>

have_posts() sprawdza, czy są wpisy do wyświetlenia. Jeśli tak, the_post() inicjalizuje wewnętrzny wskaźnik WordPress na bieżący wpis, po czym wewnątrz Pętli stają się dostępne dziesiątki znaczników szablonu: the_title() dla tytułu, the_content() dla treści wpisu, the_permalink() dla linku, the_excerpt() dla zajawki i wiele innych.

Pętlę zazwyczaj umieszcza się w index.php do wyświetlania listy wpisów, ale nic nie stoi na przeszkodzie, aby używać jej w single.php, page.php lub archive.php, logika jest ta sama, różni się tylko kontekst. Wewnątrz Pętli proszę dodawać dowolne opakowania HTML i znaczniki PHP, WordPress zastosuje je do każdego wpisu po kolei.

Praktyczny przykład, wyświetlenie tytułu i daty każdego wpisu:

1<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
2 <article>
3 <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
4 <time><?php echo get_the_date(); ?></time>
5 </article>
6<?php endwhile; endif; ?>

Teraz o tym, jak Pętla współdziała z resztą motywu, poprzez znaczniki dołączające.

Znaczniki dołączające szablonu

Znaczniki dołączające (Include Tags), to funkcje PHP, które ładują zawartość jednego pliku motywu do drugiego. Tworzą one szkielet typowego index.php: nagłówek, treść, sidebar, stopka. Cztery podstawowe funkcje:

  • <?php get_header(); ?>, dołącza header.php. Zazwyczaj pierwsza linia w index.php i każdym innym szablonie, gdzie potrzebny jest nagłówek.
  • <?php get_sidebar(); ?>, dołącza sidebar.php. Jeśli panel boczny nie jest potrzebny, proszę po prostu usunąć wywołanie.
  • <?php get_footer(); ?>, dołącza footer.php. Zawsze na końcu szablonu, zamyka stronę.
  • <?php comments_template(); ?>, dołącza comments.php. Umieszcza się wewnątrz single.php, po wyświetleniu treści wpisu.

Wszystkie cztery funkcje szukają plików w folderze aktywnego motywu. Jeśli pliku nie ma, WordPress po prostu nic nie wyświetla (z wyjątkiem get_header() i get_footer(), ich brak zepsuje układ strony).

Następny poziom, znaczniki, które nie tylko dołączają pliki, ale wydobywają dane z bazy.

Znaczniki bloginfo

Przykład wyświetlania danych witryny za pomocą funkcji bloginfo w WordPress

Znaczniki bloginfo() wydobywają informacje o witrynie z bazy danych WordPress, te same, które wypełniają Państwo w Ustawienia → Ogólne oraz w profilu użytkownika. Funkcja zwraca ciąg znaków i od razu wyświetla go na ekranie. Najczęściej używane parametry:

Parametr

Co zwraca

<?php bloginfo('name'); ?>

Tytuł witryny

<?php bloginfo('url'); ?>

URL witryny

<?php bloginfo('description'); ?>

Slogan (opis) witryny

<?php bloginfo('charset'); ?>

Kodowanie (domyślnie UTF-8)

<?php bloginfo('stylesheet_url'); ?>

URL pliku style.css aktywnego motywu

<?php bloginfo('version'); ?>

Wersja zainstalowanego WordPress

<?php bloginfo('language'); ?>

Język witryny

<?php bloginfo('rss_url'); ?>

URL kanału RSS (RSS 0.92)

<?php bloginfo('rss2_url'); ?>

URL kanału RSS (RSS 2.0)

To tylko wierzchołek góry lodowej, pełna lista parametrów znajduje się w dokumentacji WordPress.

Get_bloginfo(), gdy trzeba nie wyświetlić, a zapisać

W przypadkach, gdy informacje o witrynie trzeba wykorzystać w kodzie, a nie tylko pokazać na stronie, stosuje się funkcję get_bloginfo():

1<?php $info = get_bloginfo( $show, $filter ); ?>
  • $show, słowo kluczowe. Obsługiwane są wartości 'name' (tytuł), 'url' (adres), 'description' (slogan), 'admin_email' (email administratora) i inne; pełna lista w dokumentacji.
  • $filter, tryb filtrowania: 'raw' (wartość „jak jest", domyślnie) lub 'display' (wartość przepuszczana przez wptexturize(), przekształca cudzysłowy, myślniki, znaki).

Przykład: pobieramy opis witryny i wyświetlamy z prefiksem:

1<?php $site_description = get_bloginfo( 'description' ); ?>
2<?php echo 'Слоган вашего сайта: ' . esc_html( $site_description ); ?>

Rezultat: „Slogan Państwa witryny: Najlepsze premium motywy WordPress".

Oprócz bloginfo, WordPress ma rozbudowany system tagów szablonu: tagi ogólne, tagi autorów, miniaturek, kategorii, linków, wszystkie działają zarówno wewnątrz Pętli, jak i poza nią, a ich kombinacje dają pełną kontrolę nad wyświetlaniem treści.

Tabela stylów motywu

style.css pełni dwie role. Pierwsza, identyfikacyjna: nagłówek na samej górze pliku informuje WordPress o nazwie motywu, autorze, wersji, licencji. Druga, wizualna: wszystkie reguły CSS sterujące wyglądem witryny. Standardowy nagłówek wygląda następująco:

1/*
2Theme Name: Название темы
3Theme URI: https://www.example.com/theme
4Author: Ваше Имя
5Author URI: https://www.example.com/
6Description: Адаптивная тема WordPress с поддержкой...
7Version: 1.0
8License: GNU General Public License v2 or later
9License URI: http://www.gnu.org/licenses/gpl-2.0.html
10Tags: responsive, two-columns, right-sidebar, custom-header
11Text Domain: mythemename
12*/

Zasady dobrego tonu podczas pracy z style.css:

  • Proszę przestrzegać standardów kodowania CSS WordPress, jednolity styl ułatwia utrzymanie.
  • Proszę sprawdzać CSS pod kątem poprawności za pomocą walidatora W3C.
  • Proszę minifikować CSS na produkcji, ale pozostawiać czytelny kod źródłowy do celów deweloperskich.
  • Proszę dodawać style dla druku (@media print), wielu czytelników drukuje artykuły.
  • Proszę stylizować wszystkie standardowe elementy HTML, które mogą wystąpić w treści wpisu.

Hierarchia szablonów WordPress

Dla każdego żądania WordPress sam decyduje, który plik PHP motywu podłączyć, to właśnie jest hierarchia szablonów. Zasada jest jedna: od najbardziej szczegółowego pliku do najbardziej ogólnego, a index.php to ostatnia opcja zapasowa dla każdej gałęzi. Znajomość kolejności usuwa pytanie „dlaczego edycja w single.php nie jest widoczna na stronie kategorii".

1Отдельная запись → single-{post_type}-{slug}.php → single-{post_type}.php → single.php → singular.php → index.php
2Страница → {шаблон из редактора}.php → page-{slug}.php → page-{id}.php → page.php → singular.php → index.php
3Рубрика → category-{slug}.php → category-{id}.php → category.php → archive.php → index.php
4Архив → archive-{post_type}.php → archive.php → index.php
5Поиск → search.php → index.php
6Ошибка 404 → 404.php → index.php
7Главная → front-page.php → home.php → index.php

WordPress bierze pierwszy istniejący plik od lewej do prawej. Dlatego single-product.php nadpisze single.php tylko dla wpisów typu product, nie naruszając reszty.

Hooki: akcje i filtry

Hooki to punkty rozszerzeń WordPress: umożliwiają wpięcie się w działanie rdzenia bez edytowania jego plików. Akcje (actions) wykonują efekt uboczny (podłączenie skryptu, wysłanie maila), filtry (filters) otrzymują wartość, zmieniają ją i muszą zwrócić z powrotem. Zapomniany return w filtrze to najczęstsza przyczyna pustej treści.

1// Регистрация
2add_action( 'имя_хука', 'callback', 10, 1 ); // приоритет, число аргументов
3add_filter( 'имя_хука', 'callback', 10, 1 );
4
5// Вызов (в ядре или своём коде)
6do_action( 'имя_хука', $arg ); // действие: ничего не возвращает
7apply_filters( 'имя_хука', $value, $arg ); // фильтр: ВОЗВРАЩАЕТ значение
8
9// Удаление (приоритет должен совпадать с тем, что был при добавлении)
10remove_action( 'имя_хука', 'callback', 10 );

Przykład: dodać akapit na końcu każdego wpisu:

1add_filter( 'the_content', 'my_append_note', 20 );
2function my_append_note( $content ) {
3 return $content . '<p>Спасибо за чтение!</p>'; // без return контент исчезнет
4}

Kluczowe hooki motywu:

  • after_setup_theme, rejestracja wsparcia funkcji (add_theme_support()), menu, rozmiarów miniaturek.
  • wp_enqueue_scripts, jedyne poprawne miejsce do podłączania CSS i JS frontendu.
  • init, wczesna inicjalizacja: rejestracja typów wpisów i shortkodów.
  • the_content, filtrowanie HTML wpisu przed wyświetleniem.

Niższy priorytet, wcześniejsze wykonanie (domyślnie 10). Aby callback otrzymał więcej niż jeden argument, należy zwiększyć czwarty parametr accepted_args.

Tagi warunkowe

Tagi warunkowe (Conditional Tags) to funkcje, które zwracają true lub false w zależności od tego, która strona jest aktualnie otwarta. Na nich buduje się logikę „tutaj pokazujemy sidebar, a na 404 nie".

1is_home() // блоговая лента записей
2is_front_page() // главная страница сайта
3is_single() // отдельная запись
4is_page() // отдельная страница
5is_singular() // любая одиночная запись/страница/CPT
6is_archive() // любой архив
7is_category() // архив рубрики
8is_search() // страница результатов поиска
9is_404() // страница ошибки 404
10is_user_logged_in() // пользователь авторизован
11is_admin() // запрос идёт в админке (НЕ «пользователь администратор»)

Główna pułapka: zapytaniowe tagi warunkowe (is_single, is_page, is_home i inne) działają dopiero po utworzeniu głównego zapytania, czyli wewnątrz plików szablonu i Pętli lub począwszy od hooka template_redirect. Wywołanie na początku functions.php lub na init jest zbyt wczesne: WordPress zgłosi _doing_it_wrong() i zwróci nieprawidłowy wynik. Wyjątki, is_admin() i is_user_logged_in(), nie zależą od zapytania i są dostępne wcześniej. I proszę pamiętać: is_admin() sprawdza kontekst (panel administracyjny kontra frontend), a nie rolę; do sprawdzenia roli należy używać current_user_can( 'manage_options' ).

Podłączanie skryptów i stylów

Pokusa, by wpisać <link> i <script> bezpośrednio w header.php, jest duża, ale to błąd: traci się kontrolę nad zależnościami, wersjonowanie do czyszczenia cache, strategie defer/async i ochronę przed podwójnym załadowaniem (dwie wtyczki z łatwością podłączą jQuery dwukrotnie). Prawidłowa droga to kolejka WordPress na hooku wp_enqueue_scripts.

1add_action( 'wp_enqueue_scripts', 'my_theme_assets' );
2function my_theme_assets() {
3 // Стиль темы с версией из заголовка style.css
4 wp_enqueue_style(
5 'my-theme',
6 get_stylesheet_uri(),
7 array(),
8 wp_get_theme()->get( 'Version' )
9 );
10
11 // Скрипт с зависимостью и современным синтаксисом (WP 6.3+)
12 wp_enqueue_script(
13 'my-app',
14 get_theme_file_uri( 'assets/js/app.js' ),
15 array( 'jquery' ), // зависимости
16 '1.0.0', // версия → сброс кеша
17 array(
18 'in_footer' => true,
19 'strategy' => 'defer',
20 )
21 );
22}

Począwszy od WordPress 6.3, ostatnim parametrem wp_enqueue_script() jest tablica $args (in_footer, strategy), choć stara forma z wartością logiczną true dla stopki nadal działa. Dla frontendu należy używać wp_enqueue_scripts, dla panelu administracyjnego admin_enqueue_scripts, dla strony logowania login_enqueue_scripts.

Shortkody

Shortkody przekształcają krótki zapis w nawiasach kwadratowych na dowolny HTML, wygodne do przycisków, galerii i formularzy wewnątrz treści. Procedura obsługi musi zwrócić ciąg znaków, a nie wypisywać go przez echo, w przeciwnym razie wynik „wyskoczy" na początek strony.

1add_shortcode( 'btn', 'my_button_shortcode' );
2function my_button_shortcode( $atts, $content = null, $tag = '' ) {
3 $a = shortcode_atts(
4 array( 'url' => '#', 'label' => 'Кнопка' ),
5 $atts,
6 $tag
7 );
8 return sprintf(
9 '<a class="btn" href="%s">%s</a>',
10 esc_url( $a['url'] ), // экранируем на выводе
11 esc_html( $a['label'] )
12 );
13}
14// Использование в записи: [btn url="https://example.com" label="Купить"]

shortcode_atts() nakłada atrybuty użytkownika na wartości domyślne. Jeśli trzeba wykonać shortkody wewnątrz ciągu znaków lub szablonu, należy go opakować w do_shortcode(), ale aby wywołać własną funkcję, należy wołać ją bezpośrednio, bez pośrednika.

WP_Query i zapytania niestandardowe

WP_Query to klasa do wszelkich pobrań wpisów: ostatnie wiadomości w sidebarze, zestawienie według kategorii, strumień niestandardowego typu. Po swojej pętli koniecznie należy wywołać wp_reset_postdata(), w przeciwnym razie tagi szablonu dalej na stronie otrzymają nie ten wpis.

1$q = new WP_Query( array(
2 'post_type' => 'post',
3 'posts_per_page' => 5,
4 'category_name' => 'news',
5 'orderby' => 'date',
6 'order' => 'DESC',
7) );
8
9if ( $q->have_posts() ) {
10 while ( $q->have_posts() ) {
11 $q->the_post();
12 the_title( '<h3>', '</h3>' );
13 }
14 wp_reset_postdata(); // вернуть глобальный $post
15}

Aby zmienić główne zapytanie strony (na przykład liczbę wpisów na stronie głównej), nie należy używać przestarzałego query_posts(), generuje ono dodatkowe zapytanie do bazy danych i psuje paginację. Prawidłowo, hook pre_get_posts, który zmienia zapytanie przed jego wykonaniem:

1add_action( 'pre_get_posts', 'my_main_query' );
2function my_main_query( $query ) {
3 if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {
4 $query->set( 'posts_per_page', 12 );
5 }
6}

Bezpieczeństwo: eskejpowanie i sanityzacja

Złota zasada WordPressa: sanityzujemy na wejściu, eskejpujemy na wyjściu, sprawdzamy wszędzie. Wszelkie dane od użytkownika czyścimy przed zapisem w bazie i eskejpujemy przed wypisaniem w HTML, nawet jeśli były już wcześniej czyszczone.

1// Экранирование НА ВЫВОДЕ
2echo esc_html( $text ); // текст внутри тега
3echo esc_attr( $value ); // значение атрибута
4echo esc_url( $href ); // ссылки href/src
5echo wp_kses_post( $rich_html ); // безопасный набор HTML для контента
6
7// Санитизация НА ВХОДЕ (перед записью в БД)
8$clean = sanitize_text_field( $_POST['name'] );
9$email = sanitize_email( $_POST['email'] );
10$num = absint( $_POST['count'] );

Formularze i akcje zabezpieczamy nonce, jednorazowym tokenem przeciw CSRF:

1// В форме:
2wp_nonce_field( 'my_save_action', 'my_nonce' );
3
4// При обработке:
5if ( ! isset( $_POST['my_nonce'] ) ||
6 ! wp_verify_nonce( $_POST['my_nonce'], 'my_save_action' ) ) {
7 return; // запрос отклонён
8}

W praktyce większość podatności motywów i wtyczek to właśnie pominięte eskejpowanie wyjścia. Proszę przyjąć nawyk: żadna zmienna nie trafia do HTML bez esc_*.

REST API WordPressa

REST API udostępnia dane witryny w formacie JSON, korzystają z niego aplikacje mobilne, frontendy headless i integracje. Adres bazowy: /wp-json/wp/v2/.

1GET /wp-json/wp/v2/posts // записи
2GET /wp-json/wp/v2/pages // страницы
3GET /wp-json/wp/v2/media // медиафайлы
4GET /wp-json/wp/v2/users // пользователи
5GET /wp-json/wp/v2/posts/123 // одна запись
6GET /wp-json/wp/v2/posts?per_page=5&search=тема&_embed

Własną trasę rejestruje się na haku rest_api_init. Parametr permission_callback jest obowiązkowy, bez niego WordPress wygeneruje ostrzeżenie; dla publicznego odczytu należy ustawić '__return_true'.

1add_action( 'rest_api_init', function () {
2 register_rest_route( 'myplugin/v1', '/items/(?P<id>\d+)', array(
3 'methods' => 'GET',
4 'callback' => 'my_get_item',
5 'permission_callback' => '__return_true',
6 ) );
7} );

WP-CLI: komendy pod ręką

WP-CLI zarządza witryną z terminala, szybciej i pewniej niż klikanie w panelu administracyjnym, szczególnie przy obsłudze wielu witryn. Najczęściej używane:

1wp core update # обновить ядро WordPress
2wp core version # какая версия установлена
3wp plugin install akismet --activate # установить и сразу включить плагин
4wp plugin list # список плагинов со статусом и версией
5wp theme activate twentytwentyfive # сменить активную тему
6wp db export backup.sql # дамп базы в файл
7wp search-replace 'old.com' 'new.com' --dry-run # сначала всегда сухой прогон
8wp user create bob [email protected] --role=editor # создать пользователя
9wp cache flush # сбросить объектный кеш

wp search-replace rozumie dane zserializowane, dlatego bezpiecznie zmienia domenę podczas przenoszenia witryny, w przeciwieństwie do bezpośredniego zapytania SQL, które psuje serializację. Przed każdą niebezpieczną operacją należy wykonać wp db export.

Motywy klasyczne i blokowe w 2026 roku

Do połowy 2026 roku (aktualna wersja, WordPress 7.0 „Armstrong", zalecane PHP 8.3+) klasyczne motywy PHP są nadal w pełni wspierane i pozostają najpowszechniejszym typem. Jednak całe nowe narzędzia rdzenia rozwijają motywy blokowe i pełną edycję witryny (Full Site Editing): theme.json zamiast części ustawień functions.php, szablony HTML zamiast PHP. Pętla, bloginfo(), znaczniki warunkowe i haki są aktualne zarówno w motywach hybrydowych, jak i we wszelkich fragmentach PHP wewnątrz motywu FSE, więc ta ściąga nie traci na wartości. Praktyczna ścieżka w 2026 roku: klasyczna podstawa plus punktowe wsparcie bloków tam, gdzie jest ono naprawdę potrzebne.

⁉️🤔 Często zadawane pytania

Czy trzeba tworzyć wszystkie 13 plików dla szablonu?

Nie, minimalny działający szablon to index.php + style.css. Jednak dla pełnoprawnej witryny lepiej trzymać kompletny zestaw: każdy plik daje WordPressowi możliwość wyboru optymalnego szablonu. Na przykład bez single.php wpis zostanie wyrenderowany przez index.php i straci blok komentarzy.

Czym get_bloginfo() różni się od bloginfo()?

bloginfo() od razu wypisuje wartość na ekran (echo). get_bloginfo() zwraca ciąg znaków do zmiennej, można go przetworzyć, uzupełnić lub użyć wewnątrz innego wyrażenia przed faktycznym wyświetleniem.

Gdzie umieścić Pętlę, jeśli na stronie jest kilka typów treści?

Pętlę można uruchamiać wielokrotnie. Typowy scenariusz: jedna Pętla dla głównej listy wpisów, druga dla widżetu „ostatnie wiadomości" w pasku bocznym. Przed drugą Pętlą należy zresetować wskaźnik za pomocą wp_reset_postdata(), w przeciwnym razie kolejny kod na stronie otrzyma nieprawidłowy kontekst wpisu.

Czy ta ściąga działa dla szablonów blokowych (FSE)?

Częściowo. Szablony blokowe (Full Site Editing) używają theme.json zamiast functions.php do wielu ustawień oraz szablonów w HTML, a nie PHP. Ale Pętla, bloginfo() i znaczniki dołączające pozostają aktualne dla szablonów hybrydowych i wszelkich szablonów PHP wewnątrz szablonu FSE.

Co zrobić, gdy functions.php staje się zbyt duży?

Należy rozbić logikę na osobne pliki i dołączać je z functions.php przez require_once lub include. Na przykład: require_once get_template_directory() . '/inc/custom-post-types.php';. Poprawia to czytelność i ułatwia utrzymanie, to zasada dobrego tonu dla każdego szablonu z więcej niż 20-30 zaczepami.

Czym akcja (action) różni się od filtra (filter)?

Akcja wykonuje efekt uboczny i nic nie zwraca (podłączyć skrypt, wysłać e-mail). Filtr otrzymuje wartość, zmienia ją i musi ją zwrócić, zapomniany return w filtrze wyzeruje zawartość. Rejestruje się je identycznie: add_action() i add_filter().

Dlaczego is_single() nie działa w functions.php?

Warunkowe znaczniki zapytania są dostępne dopiero po sformowaniu głównego zapytania, czyli w plikach szablonu lub począwszy od zaczepu template_redirect. Na początku functions.php zapytanie nie jest jeszcze gotowe, dlatego WordPress zgłosi _doing_it_wrong(). Bez powiązania z zapytaniem działają tylko is_admin() oraz is_user_logged_in().

Co mieć pod ręką podczas pracy z WordPressem

Ta ściąga to szkielet, od którego zaczyna się pracę z WordPressem. Pliki szablonu i hierarchia szablonów, Pętla, znaczniki dołączające i bloginfo() składają szablon, a zaczepy i filtry, znaczniki warunkowe, podłączanie skryptów, shortkody, WP_Query, eskejpowanie, REST API i WP-CLI pokrywają zdecydowaną większość rutynowych zadań. Reszta to praktyka i dokumentacja.

Do pogłębionej nauki podręcznik tworzenia szablonów na developer.wordpress.org, to pierwszy adres. Tam też znajduje się spis znaczników szablonu z setkami funkcji na każdą okazję. Jeśli przechodzą Państwo ścieżkę od układu HTML do gotowego szablonu, proszę zacząć od przewodnika krok po kroku, jak stworzyć szablon WordPress z HTML, gdzie Pętla i znaczniki są omówione w bojowym kontekście, od układu graficznego do działającego szablonu.

Proszę dodać tę ściągę do zakładek i mieć ją pod ręką podczas pracy.

Którego znacznika lub zaczepu szukają Państwo najczęściej? Proszę napisać w komentarzach, z jakim zadaniem w WordPressie się Państwo zetknęli, i podzielić się swoim przypadkiem, żywa wymiana doświadczeń jest warta tuzina oficjalnych podręczników.