Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

🔖 Jak włączyć tagi na stronach WordPress

🔖 Jak włączyć tagi na stronach WordPress

Strony WordPress nie obsługują tagów od razu po instalacji i jest to irytujące dokładnie do momentu, gdy zrozumie się, dlaczego tak to zaprojektowano. Strona w WordPress to technicznie niestandardowy typ wpisu, do którego taksonomia post_tag po prostu nie jest przypisana. Deweloperzy rdzenia pozostawili tagi tylko dla postów, uznając strony za treść statyczną.

W praktyce jednak to ograniczenie obchodzi się w pięć minut. Dwa sposoby: linia kodu w functions.php lub mikrowtyczka, którą można włączać i wyłączać bez edycji motywu. Poniżej obie opcje z wyjaśnieniem, co dokładnie dzieje się pod maską.

💡 Szybki przegląd:

  • Rejestrujemy taksonomię post_tag dla typu wpisu page, jedna funkcja register_taxonomy_for_object_type

  • Dodajemy obsługę tagów w archiwach przez hook pre_get_posts, aby strony pojawiały się w wynikach wyszukiwania według tagu

  • Kod działa dla dowolnych niestandardowych typów wpisów, wystarczy powtórzyć wywołanie z odpowiednią nazwą typu

  • Wszystko można zamknąć w osobnej wtyczce w minutę: plik → nagłówek wtyczki → kod → aktywacja

Po co tagi na stronach

Tagi to nie tylko chmura w sidebarze. To oś nawigacyjna, która łączy rozproszone strony w grupy tematyczne szybciej niż kategorie czy menu.

Strony WordPress często się rozrastają: kontakt, polityka prywatności, regulamin, landingi usług, portfolio, dokumentacja. Bez tagów powiązania między nimi opierają się wyłącznie na ręcznych linkach w tekście. Z tagami jedna strona „Dostawa" automatycznie trafia do grupy „logistyka" obok strony „Zwroty", a odwiedzający klika tag i widzi wszystkie powiązane treści.

Dla SEO tagi na stronach zapewniają dodatkowe linkowanie wewnętrzne i obniżają współczynnik odrzuceń: użytkownik nie opuszcza serwisu po pierwszej stronie, tylko zagłębia się w tematyczny zestaw. Ponadto tagi trafiają do mapy witryny, a wyszukiwarka lepiej rozumie strukturę.

Sposób 1: Kod w functions.php

Najprostsza ścieżka: dodać snippet do pliku functions.php aktywnego motywu. Otwórz wp-content/themes/TWÓJ_MOTYW/functions.php i wstaw kod przed zamykającym ?> lub na samym końcu pliku:

1/**
2 * Добавляем поддержку тегов на страницы WordPress.
3 * Код — в functions.php дочерней темы или через плагин Code Snippets.
4 */
5function sdstudio_add_tags_to_pages() {
6 register_taxonomy_for_object_type( 'post_tag', 'page' );
7}
8add_action( 'init', 'sdstudio_add_tags_to_pages' );
9
10/**
11 * Включаем страницы в архивные запросы по тегам.
12 * Без этого страницы не появятся на /tag/название-тега/
13 */
14function sdstudio_pages_in_tag_archives( $wp_query ) {
15 if ( $wp_query->get( 'tag' ) ) {
16 $wp_query->set( 'post_type', 'any' );
17 }
18}
19add_action( 'pre_get_posts', 'sdstudio_pages_in_tag_archives' );

Co tu się dzieje. Funkcja register_taxonomy_for_object_type() wiąże istniejącą już taksonomię post_tag z typem wpisu page. To rdzenna funkcja WordPressa, dokumentacja na developer.wordpress.org. Nie tworzy ona nowej taksonomii, a jedynie dodaje powiązanie „strony → tagi".

Hook pre_get_posts modyfikuje zapytanie SQL przed jego wykonaniem. Gdy WordPress buduje stronę archiwum tagu (/tag/название/), domyślnie szuka tylko wpisów typu post. Linia $wp_query->set( 'post_type', 'any' ) rozszerza wyniki na wszystkie typy: strony, posty, typy niestandardowe.

Po wstawieniu kodu proszę wejść na dowolną stronę, z boku pojawi się blok „Tagi" tak jak w zwykłych wpisach. Działa od razu, nie trzeba czyścić cache.

Adaptacja do niestandardowych typów wpisów

Jeśli mają Państwo niestandardowe typy wpisów (CPT), portfolio, referencje, produkty i one również potrzebują tagów, proszę dodać tyle samo wywołań register_taxonomy_for_object_type() wewnątrz funkcji init:

1register_taxonomy_for_object_type( 'post_tag', 'portfolio' );
2register_taxonomy_for_object_type( 'post_tag', 'testimonials' );

Nazwa CPT jako drugi argument, ta sama, którą podano podczas rejestracji typu przez register_post_type(). Nie trzeba nic dodatkowo zmieniać w pre_get_posts: 'any' już obejmuje wszystkie zarejestrowane typy.

Sposób 2: Osobna wtyczka

Edytowanie functions.php bezpośrednio to działające rozwiązanie, ale kruche. Zmiana motywu, kod znika, tagi ze stron znikają. Dla osób prowadzących wiele witryn lub często zmieniających motywy bezpieczniej jest wynieść snippet do osobnej wtyczki.

Proszę utworzyć plik wp-content/plugins/sdstudio-tags-for-pages.php z następującą zawartością:

1<?php
2/**
3 * Plugin Name: Tags for Pages
4 * Description: Enables post tags on WordPress pages and custom post types
5 * Version: 1.0
6 * Author: SDStudio
7 * License: GPL-2.0+
8 */
9
10// Прямой доступ — запрещён
11if ( ! defined( 'ABSPATH' ) ) {
12 exit;
13}
14
15// Теги → страницы
16function sdstudio_tags_for_pages() {
17 register_taxonomy_for_object_type( 'post_tag', 'page' );
18}
19add_action( 'init', 'sdstudio_tags_for_pages' );
20
21// Страницы → архив тегов
22function sdstudio_pages_in_tag_queries( $wp_query ) {
23 if ( ! is_admin() && $wp_query->is_main_query() && $wp_query->get( 'tag' ) ) {
24 $wp_query->set( 'post_type', 'any' );
25 }
26}
27add_action( 'pre_get_posts', 'sdstudio_pages_in_tag_queries' );

Różnica w stosunku do pierwszego sposobu: sprawdzenie ! is_admin() && $wp_query->is_main_query(). Gwarantuje ono, że zapytania w panelu administracyjnym nie są naruszone: pre_get_posts działa wszędzie, w tym na liście stron w konsoli, a bez tego sprawdzenia można uzyskać nieoczekiwane zachowanie w panelu podczas filtrowania.

Plik jest gotowy, proszę wejść w Wtyczki, znaleźć „Tags for Pages" i aktywować. To wszystko. Przy zmianie motywu wtyczka pozostaje aktywna, tagi nie znikają. Na multisite wtyczkę można włączać na poszczególne witryny lub aktywować od razu dla całej sieci.

Sposób 3: Gotowe wtyczki z katalogu

Jeśli nie chcą Państwo pisać kodu, zadanie zamykają gotowe rozwiązania z WordPress.org. Dodają one nie tylko tagi, ale i kategorie dla stron, plus interfejs zarządzania.

Add Categories to Pages to lekka wtyczka, która jednym zaznaczeniem włącza zarówno kategorie, jak i tagi dla stron. Bez ustawień, bez reklam. Pasuje, gdy potrzebują Państwo po prostu „żeby działało" bez dodatkowych ekranów.

Oto demonstracja wideo instalacji tagów na stronach przez kod i przez wtyczkę, 4 minuty, wszystkie kroki pokazane w czasie rzeczywistym:

Kluczowa kwestia: zewnętrzne wtyczki ciągną za sobą dodatkowy kod i hooki. Jeśli witryna jest już obciążona kilkunastoma wtyczkami, kolejna to dodatkowy punkt awarii. Kod ze sposobów 1 i 2 waży zaledwie kilka bajtów i nie dodaje zapytań do bazy danych ponad standardowe.

⁉️🤔 Często zadawane pytania

Czy to działa na multisite? Tak, kod jest uniwersalny. Można aktywować wtyczkę na poszczególne witryny lub włączyć na całą sieć przez „Aktywuj w sieci".

Na multisite WordPress kod działa tak samo na wszystkich witrynach sieci. Funkcja register_taxonomy_for_object_type() jest powiązana z taksonomią post_tag, która istnieje w każdej witrynie sieci osobno, tagi nie krzyżują się między witrynami. Dla każdej witryny podrzędnej tagi na stronach włącza się niezależnie: aktywowano wtyczkę na jednej witrynie, tagi pojawiły się tylko tam.

Czy trzeba aktualizować bezpośrednie odnośniki po wstawieniu kodu? Nie, struktura URL nie zmienia się. Tagi na stronach nie dodają nowych reguł przepisywania.

WordPress przechowuje powiązanie „strona, tag" w tabeli wp_term_relationships, tej samej, która jest używana dla postów. Żadne reguły rewrite nie są naruszane: archiwum tagu już istnieje (/tag/название/), a pre_get_posts po prostu włącza strony do jego wyników. Bezpośrednich odnośników można nie ruszać, wszystko działa od razu po aktywacji kodu.

Czy tagi znikną przy zmianie motywu? Zależy od sposobu. Kod w functions.php motywu: znikną. Kod we wtyczce lub Code Snippets: pozostaną.

Przy zmianie motywu WordPress ładuje nowy functions.php, dlatego snippet ze starego motywu przestaje być wykonywany, a metabox tagów na stronach znika. Same powiązania „strona, tag" w bazie danych nie są przy tym usuwane. Wystarczy przywrócić kod (w nowym motywie lub przez wtyczkę), a wszystkie wcześniej przypisane tagi zostaną przywrócone w panelu administracyjnym.

Czy można przypisać tagi programowo podczas importu stron? Tak, przez wp_set_object_terms( $page_id, array( 'тег1', 'тег2' ), 'post_tag' ).

Funkcja wp_set_object_terms() przyjmuje ID strony, tablicę nazw tagów i nazwę taksonomii. Jeśli tag o takiej nazwie nie istnieje, WordPress utworzy go automatycznie. Jest to wygodne podczas migracji: skrypt przebiega po wszystkich stronach i przypisuje tagi z pliku CSV lub starego CMS. Ważne, aby uruchomić skrypt po init, w przeciwnym razie taksonomia nie jest jeszcze zarejestrowana.

Co z chmurą tagów, strony do niej trafią? Tak, standardowy widget „Chmura tagów" pobierze tagi ze stron bez dodatkowych ustawień.

Widget wp_tag_cloud() domyślnie zbiera wszystkie obiekty taksonomii post_tag niezależnie od typu wpisu. Gdy tylko na stronie pojawi się choć jeden tag, trafia on do chmury na równi z tagami postów. Częstotliwość również jest liczona poprawnie: tag na trzech stronach i dwóch postach da wagę „5" i wyświetli się większym rozmiarem.

Co wybrać: kod czy wtyczkę

Konkretny wybór zależy od scenariusza, a nie od „prawidłowej odpowiedzi".

Użytkownikom pojedynczych witryn, którzy nie zmieniają motywu latami, wystarczy snippet w functions.php: skopiowany, wklejony, działa. Freelancerom z kilkunastoma witrynami klientów wygodniejsza będzie wtyczka: wysłany plik zip do klienta lub aktywacja na nowym projekcie w sekundę. Tym, którzy już korzystają z Code Snippets lub WPCodeBox, łatwiej dodać snippet do kolekcji, nie zgubi się przy aktualizacji motywu i nie wymaga osobnej wtyczki.

Jeśli potrzebują Państwo więcej niż tagi: kategorie, dowolne taksonomie, rozszerzone filtrowanie, proszę spojrzeć na gotowe wtyczki z WordPress.org. Ale do zadania „włączyć tagi na stronach" siedem linii kodu w zupełności wystarczy. Wszystko inne to przesada.

Następnie proszę skonfigurować strukturę tagów: przemyśleć 5-7 kluczowych tematów dla stron i przypisać je. Po miesiącu chmura tagów sama pokaże, które tematy witryny są ze sobą najsilniej powiązane.