Logika to mózg twojego motywu. W 2026 roku, przy Full Site Editing (FSE) i złożonych Motywach Blokowych, możesz myśleć, że logika PHP jest przestarzała. Nie jest. Logika backendowa determinuje co wyrenderować, zanim Edytor Blokowy w ogóle się załaduje.
Częstym błędem programistów jest mylenie in_category() (dla natywnej taksonomii ‘category’) z has_term() (dla taksonomii własnych).
Ten 1500-słowowy przewodnik ustanawia Standardowe Procedury Operacyjne (SOP) dla logiki warunkówej w nowoczesnym WordPressie.
Część 1: Podstawy - Sprawdzanie kategorii
1. IN_category()
Używaj tego ŚCIŚLE dla wbudowanej taksonomii “Kategorie” (Category).
if ( in_category( 'news' ) ) {
// To jest wpis typu News.
}
Ostrzeżenie: Sprawdza slug lub ID. NIE sprawdza własnych taksonomii (jak ‘product_cat’ w WooCommerce).
2. Has_term() (narzędzie uniwersalne)
W 2026 powinieneś prawie zawsze preferować has_term(). Działa że wszystkim: Kategoriami, Tagami i Własnymi Taksonomiami.
// Sprawdź czy bieżący post jest w terminie 'jeans' taksonomii 'product_cat'
if ( has_term( 'jeans', 'product_cat' ) ) {
// To jest para jeansów.
}
Część 2: Złożoność hierarchii (dzieci i rodzice)
Natywne funkcje WordPressa sprawdzają dokładne dopasowanie.
Jeśli sprawdzisz in_category('owoce'), ale wpis jest tylko w kategorii potomnej jablko, sprawdzenie zwróci ODRASZ.
To źródło numer 1 błędów logicznych.
Rozwiązanie: Post_is_in_descendant_category()
WordPress wciąż nie ma wbudowanej rekurencyjnej funkcji sprawdzającej w jądrze (nawet w 2026). Musisz zaimplementować funkcję pomocniczą.
/**
* Sprawdza, czy post należy do kategorii lub któregokolwiek z jej potomków.
* Zoptymalizowane pod kątem wydajności przy użyciu cache get_term_children.
*
* @param int|string $field Klasa/Slug/ID kategorii
* @param int $post_id Opcjonalnie. ID Posta.
* @return bool
*/
function wppoland_post_is_in_descendant_category( $cats, $_post = null ) {
$_post = get_post( $_post );
if ( ! $_post ) return false;
$term_id = is_numeric($cats) ? $cats : get_cat_ID($cats);
if (! $term_id) return false;
$descendants = get_term_children( $term_id, 'category' );
$descendants[] = $term_id; // Dołącz rodzica
return in_category( $descendants, $_post );
}
Część 3: Tagi warunkówe w 2026
Nowoczesna logika WordPressa jest często obsługiwana w theme.json, ale twardo kodowane warunki PHP są wciąż kluczowe dla:
- Dołączania Zasobów: “Ładuj ciężki JavaScript Map tylko na postach w kategorii ‘Lokalizacje’.”
- Filtrowania Treści: “Automatycznie doklejaj zrzeczenie się odpowiedzialności do wszystkich postów w ‘Porady Medyczne’.”
Przykład: Inteligentne Ładowanie zasobów
add_action( 'wp_enqueue_scripts', function() {
if ( has_term( 'marketing', 'category' ) || is_page_template( 'landing.php' ) ) {
wp_enqueue_script( 'conversion-tracking' );
}
} );
Część 4: Operatory logiczne i wydajność
Is_object_in_term
Jeśli uruchamiasz logikę poza pętlą (np. w zadaniu w tle lub endpoincie REST API), użyj is_object_in_term(). Unika to ustawiania globalnego obiektu post.
Wpływ na bazę danych
Każde wywołanie has_term wyzwala sprawdzenie w pamięci podręcznej. Jest szybkie (O(1)), ponieważ terminy są buforowane w pamięci (Object Cache).
Jednak get_term_children może być kosztowne przy ogromnych taksonomiach (10,000+ terminów), jeśli nie jest poprawnie buforowane przez Redis/Memcached.
Część 5: Specyfika WooCommerce
WooCommerce ma własne warunki logiczne.
is_product()is_shop()is_product_category()
Typowa Pułapka: Próba użycia is_product_category() wewnątrz standardowej Pętli.
Jeśli iterujesz po produktach w zapytaniu na Blogu, is_product_category() zwróci fałsz (ponieważ strona nie jest archiwum kategorii). Musisz użyć has_term( $term, 'product_cat', $post_id ).
Podsumowanie
- Używaj
has_term()dla solidności we wszystkich taksonomiach. - Używaj własnych funkcji pomocniczych dla sprawdzeń Rekurencyjnych/Hierarchicznych.
- Optymalizuj wydajność polegając na Object Cache.
- Odróżniaj Kontekst Strony (
is_category()) od Danych Posta (in_category()).
Logika jest binarna. Upewnij się, że twoja jest TRUE (Prawdziwa).
Sprawdź nasze profesjonalne usługi WordPress aby rozwinąć swój projekt.



