Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

🔧 Jak skonfigurować nagłówki WordPress: 4 techniki przez functions.php

🔧 Jak skonfigurować nagłówki WordPress: 4 techniki przez functions.php

Nagłówki w WordPress to nie tylko tekst na górze strony. Pracują na Pana/Pani rzecz od razu w czterech obszarach: SEO (title tag w SERP), nawigacja (karta przeglądarki), design (wizualna hierarchia na stronie) oraz kontrola redakcyjna (co piszą autorzy). Jednak standardowe ustawienia panelu administracyjnego wystarczają tylko na poziom podstawowy, do precyzyjnego dostrojenia potrzebny jest kod.

Problem nasila się, gdy nad stroną pracuje kilku autorów. Jeden pisze nagłówki na 120 znaków i psuje układ graficzny. Drugi używa słów, których Pana/Pani partner zabronił w umowie. Trzeci zapomina, że tytuł strony w SERP i na stronie to dwa różne pola. Ręcznie nie da się wszystkiego upilnować.

Poniżej cztery konkretne techniki konfiguracji nagłówków WordPress przez functions.php. Każda rozwiązuje swoje zadanie: od automatycznego skracania długości po programowe blokowanie zakazanych słów. Kod wykorzystuje udokumentowane filtry WordPress i jest sprawdzony na WP 6.x, na końcu blok najczęściej zadawanych pytań na ten temat.

💡 Szybki przegląd:

  • Automatycznie ograniczamy długość nagłówka przez filtr the_title, nie pozwalamy autorom zepsuć układu graficznego
  • Zmieniamy wyrównanie nagłówka wpisu przez single.php, bez wtyczek i poprawek w CSS
  • Blokujemy publikację wpisów z zakazanymi słowami przez hook transition_post_status
  • Zmieniamy separator title-taga i dodajemy niestandardowe nagłówki przez metapola

Jak ograniczyć długość nagłówka WordPress

Długi nagłówek potrafi zniszczyć najbardziej przemyślany układ graficzny. Na stronie głównej, gdzie wyświetlane są zapowiedzi, nagłówek o długości 120 znaków wychodzi poza kartę i design wygląda na zepsuty. Szczególnie boleśnie uderza to w strony z siatką wielokolumnową.

Rozwiązanie: filtr the_title, który przycina nagłówek do zadanego limitu podczas wyświetlania na stronie. Sam wpis w bazie danych pozostaje nietknięty, skracany jest tylko wyświetlany tekst.

Kod dla functions.php:

1function sdstudio_limit_title_length( $title ) {
2 $max = 60;
3 if ( mb_strlen( $title ) > $max ) {
4 return mb_substr( $title, 0, $max ) . ' …';
5 }
6 return $title;
7}
8add_filter( 'the_title', 'sdstudio_limit_title_length' );

Co tu się dzieje: mb_strlen liczy znaki poprawnie dla cyrylicy (w przeciwieństwie do strlen, który liczy bajty). W przypadku przekroczenia limitu 60 znaków nagłówek jest przycinany, a na końcu dodawany jest wielokropek, czytelnik rozumie, że to nie jest pełny tekst. Liczbę 60 można zastąpić dowolną inną, pasującą do Pana/Pani układu graficznego.

Gdzie stosować wybiórczo? Jeśli przycinanie nagłówków jest potrzebne tylko w określonym miejscu (powiedzmy, w widżecie popularnych wpisów), proszę opakować add_filter w znacznik warunkowy:

1if ( is_home() || is_front_page() ) {
2 add_filter( 'the_title', 'sdstudio_limit_title_length' );
3}

To samo podejście działa dla is_archive(), is_category() i każdego innego kontekstu.

Jak zmienić wyrównanie nagłówka wpisu

Motywy WordPress bywają różne. Jedne dają wybór wyrównania w konfiguratorze, inne nie. Jeśli Pana/Pani motyw jest z tej drugiej kategorii, nagłówek domyślnie wyświetla się z lewej strony i nie znajdzie Pan/Pani ustawień do tego w panelu administracyjnym.

Wyrównanie nagłówka jest definiowane w szablonie single.php, pliku odpowiedzialnym za wyświetlanie pojedynczego wpisu. Tylko cztery kroki:

Edytor motywu WordPress single.php z kodem wyrównania tytułu
  • Proszę otworzyć Wygląd → Edytor motywu (lub plik single.php przez FTP/panel hostingowy)
  • Proszę znaleźć linię <?php the_title(); ?>, to ona wyświetla nagłówek
  • Proszę opakować ją w znacznik z żądanym wyrównaniem

Wyrównanie do lewej (domyślne):

1<?php the_title(); ?>

Do środka:

1<div style="text-align: center;"><?php the_title(); ?></div>

Do prawej:

1<div style="text-align: right;"><?php the_title(); ?></div>
  • Proszę zapisać plik i otworzyć dowolny wpis, nagłówek przyjmie zadaną pozycję

Sposób jest prymitywny, ale działa w każdym motywie. Czystszą opcją jest dodanie klasy CSS przez filtr body_class i ostylowanie przez arkusz stylów, ale do szybkiej poprawki styl inline jest wystarczający.

Jak zablokować niepożądane słowa w nagłówkach

Tekstowe ostrzeżenie dla autorów („proszę nie pisać słowa X w nagłówkach") działa do pierwszego zapomnianego deadline'u. Prędzej czy później ktoś opublikuje nagłówek z zakazaną frazą i w najlepszym razie wpis zobaczą wewnątrz zespołu, w najgorszym, partner lub konkurent.

Programowe blokowanie rozwiązuje problem radykalnie: WordPress po prostu nie pozwala opublikować wpisu, jeśli nagłówek zawiera zakazane słowo. Autor widzi komunikat o błędzie i jest zmuszony poprawić tekst przed publikacją.

Kod functions.php do blokowania zabronionych słów w tytułach WordPress

Kod do functions.php:

1function sdstudio_block_forbidden_title_words( $new_status, $old_status, $post ) {
2 if ( 'publish' !== $new_status || 'publish' === $old_status ) {
3 return;
4 }
5
6 $restricted = array( 'word1', 'word2', 'word3' );
7 $title = $post->post_title;
8
9 foreach ( $restricted as $word ) {
10 if ( mb_stripos( $title, $word ) !== false ) {
11 wp_die( 'Ошибка: заголовок содержит запрещённое слово — «' . esc_html( $word ) . '». Измените заголовок и попробуйте снова.' );
12 }
13 }
14}
15add_action( 'transition_post_status', 'sdstudio_block_forbidden_title_words', 10, 3 );

Jak to działa: hak transition_post_status uruchamia się przy każdej zmianie statusu wpisu. Sprawdzamy, czy nowy status to publish, a stary nie jest publish (w przeciwnym razie każda aktualizacja już opublikowanego wpisu również byłaby blokowana). Następnie mb_stripos szuka każdego słowa zakazanego w tytule, ignorując wielkość liter. Jeśli znajdzie, wp_die zatrzymuje publikację z czytelnym komunikatem.

Aby dodać własne słowo, proszę zastąpić word1, word2, word3 w tablicy $restricted. Słów może być dowolnie dużo, funkcja przejdzie po wszystkich.

Bonus: proszę pokazać autorom listę zakazanych słów bezpośrednio pod polem tytułu. Proszę dodać ten kod do tego samego pliku functions.php:

1function sdstudio_show_restricted_words_notice() {
2 $restricted = array( 'word1', 'word2', 'word3' );
3 echo '<div style="color:#856404;background:#fff3cd;padding:6px 12px;margin:8px 0;border-radius:4px;font-size:13px;">';
4 echo 'Запрещённые слова в заголовке: <strong>' . implode( ', ', $restricted ) . '</strong>';
5 echo '</div>';
6}
7add_action( 'edit_form_after_title', 'sdstudio_show_restricted_words_notice' );

Teraz lista słów zakazanych jest widoczna nad edytorem, autorzy nie będą musieli zgadywać, co dokładnie jest zabronione.

Separator tytułów i niestandardowe znaczniki title

Separator tytułu to znak między nazwą witryny a tytułem wpisu w <title>. W wynikach wyszukiwania wygląda jak „Nazwa witryny | Tytuł wpisu" lub „Nazwa witryny, Tytuł wpisu". Nie wpływa to bezpośrednio na klikalność, ale wizualnie wyróżnia Pana/Pani snippet spośród innych.

Od WordPress 4.4 separator zmienia się za pomocą filtra document_title_separator. Kod w trzech linijkach:

1function sdstudio_change_title_separator( $separator ) {
2 return '|';
3}
4add_filter( 'document_title_separator', 'sdstudio_change_title_separator' );

Znak w trzeciej linijce można zastąpić dowolnym: pionowa kreska, myślnik, znak „większe", kropka środkowa. Proszę nie używać znaków specjalnych takich jak ★ lub →, Google ich nie wyświetla i Pana/Pani snippet w wynikach będzie wyglądał niechlujnie.

Dla wersji poniżej WordPress 4.4: funkcja wp_title jest przestarzała, ale jeśli Pana/Pani witryna wciąż działa na starej wersji, proszę najpierw ją zaktualizować (kwestia bezpieczeństwa), a dopiero potem poprawić separator. Stary kod wykorzystujący wp_title pozostał w dokumentacji WordPress jako historyczny, ale nie jest zalecany.

Jak ustawić niestandardowy znacznik title dla pojedynczego wpisu

Zdarzają się sytuacje, gdy znacznik title dla SERP musi różnić się od H1 na stronie. Wtyczki SEO (Yoast, Rank Math) udostępniają do tego osobne pole. Jeśli jednak nie korzysta Pan/Pani z wtyczki SEO, zadanie rozwiązuje się za pomocą pola niestandardowego i filtra pre_get_document_title.

Kod do functions.php:

1function sdstudio_custom_title_from_meta( $title ) {
2 if ( is_singular() ) {
3 $custom = get_post_meta( get_the_ID(), 'custom_post_title', true );
4 if ( $custom ) {
5 return esc_html( $custom );
6 }
7 }
8 return $title;
9}
10add_filter( 'pre_get_document_title', 'sdstudio_custom_title_from_meta', 20 );

Jak używać:

  • Proszę otworzyć wpis, dla którego potrzebny jest niestandardowy <title>
  • W bloku „Pola niestandardowe" (jeśli go Pan/Pani nie widzi, proszę włączyć w „Ustawieniach ekranu") proszę utworzyć pole o nazwie custom_post_title
  • W wartość proszę wpisać żądany znacznik title, na przykład „Przegląd wtyczki cache 2026, porównanie i testy"
  • Proszę zapisać wpis

Jeśli pole niestandardowe nie jest wypełnione, WordPress używa standardowego znacznika title (tytuł wpisu + separator + nazwa witryny). Mechanizm działa tylko dla stron pojedynczych (is_singular), na archiwach i w panelu administracyjnym tytuły nie są ruszane.

Ważny niuans: pre_get_document_title ma priorytet 20, co gwarantuje, że filtr zadziała PO standardowym utworzeniu tytułu i nadpisze go.

Proszę obejrzeć 6-minutowe wideo na ten temat, pokazuje ono wizualny proces konfiguracji znaczników title przez panel administracyjny WordPress i wtyczki SEO.

⁉️🤔 Często zadawane pytania

Czy kod z artykułu działa na WordPress 6.x (aktualna wersja na wordpress.org)?

Tak, cały kod został sprawdzony na aktualnej wersji WordPressa. Filtry the_title, document_title_separator oraz pre_get_document_title, część rdzenia WordPressa od wersji 4.4-5.0, są w pełni obsługiwane w WP 6.x. Jedyna zmiana w porównaniu ze starymi poradnikami: zastąpienie przestarzałego haka publish_post przez transition_post_status.

Czy trzeba edytować functions.php motywu potomnego, czy można w głównym?

Zawsze należy edytować motyw potomny. Jeśli edytuje Pan/Pani functions.php motywu głównego, wszystkie zmiany zostaną utracone podczas następnej aktualizacji. Jeśli motywu potomnego nie ma, proszę go utworzyć: to pięć minut przez wtyczkę Child Theme Configurator lub ręcznie (arkusz stylów style.css + plik functions.php z dyrektywą Template:).

Czy można osiągnąć ten sam rezultat wtyczkami bez kodu?

Częściowo. Dla tytułów SEO istnieją Yoast SEO i Rank Math. Do ograniczania długości istnieją wtyczki takie jak Title Length Limiter, ale ich wsparcie jest niestabilne. Do blokowania słów i zmiany separatora nie ma standardowych wtyczek, tylko kod. Poza tym każda dodatkowa wtyczka spowalnia stronę, a cztery linijki w functions.php nie dodają zauważalnego obciążenia.

Co zrobić, jeśli po edycji functions.php strona padła i widać biały ekran?

Proszę połączyć się z serwerem przez FTP lub menedżer plików hostingu, otworzyć functions.php i usunąć dodany kod. Jeśli nie ma Pan/Pani dostępu do FTP, proszę wejść do phpMyAdmin, znaleźć tabelę wp_options, wiersz active_plugins i tymczasowo dezaktywować wszystkie wtyczki (to zresetuje cache). Na przyszłość: przed każdą edycją functions.php proszę włączyć WP_DEBUG w wp-config.php, wtedy zamiast białego ekranu zobaczy Pan/Pani tekst błędu.

Czy separator tytułu wpływa na SEO?

> Bezpośredniego wpływu na ranking nie ma, Google nie ocenia, czy używa Pan/Pani | czy -. Pośredni wpływ istnieje: niestandardowego separatora (, ) Google może nie wyświetlić, a snippet w wynikach stanie się wizualnie gorszy. Dodatkowo rozpoznawalny separator działa na korzyść marki: użytkownik przyzwyczaja się do formatu „Marka | Tytuł" i szybciej zauważa Pana/Pani wyniki w SERP.

Co wdrażać i w jakiej kolejności

Cztery powyższe techniki pokrywają wszystkie główne scenariusze pracy z tytułami WordPressa. Kolejność wdrażania, od prostego do złożonego:

Najpierw proszę zmienić separator tagu title, to trzy linijki kodu i natychmiastowy rezultat w wynikach wyszukiwania. Następnie proszę skonfigurować niestandardowe <title> przez metapola, jeśli na stronie są kluczowe podstrony, które potrzebują osobnego tytułu w SERP. Potem proszę wdrożyć filtr długości, ochroni on układ przed zbyt długimi tytułami bez żadnych działań ze strony autorów. Na końcu proszę dodać blokadę stop-słów, gdy lista zabronionych fraz jest już uzgodniona i zatwierdzona.

Przed każdą edycją functions.php proszę zrobić kopię zapasową pliku, skopiować jego zawartość do edytora tekstu i zapisać lokalnie. To zajmie dziesięć sekund i zaoszczędzi godziny odtwarzania w razie błędu.