Codzienna dawka WordPressa – poznajemy kolejne funkcje pozwalające nam bez strachu tworzyć klasyczne szablony WordPressa (które są moim zdaniem na razie jeszcze lepsze od blokowych a już na pewno dają nam większą kontrolę i są lepiej udokumentowane).
Pobieranie kategorii po slugu – mamy od tego funkcję get_category_by_slug:
$category = get_category_by_slug('zdrowie');
Nie jest to najlepsze rozwiązanie, szczególnie jeżeli slug to więcej niż jeden wyraz, tutaj lepiej sprawdzi się funkcja get_terms_by:
$category = get_term_by('slug', 'zdrowie-i-medycyna', 'category');
Link pobieramy za pomocą funkcji get_category_link:
$category = get_term_by('slug', 'zdrowie-i-medycyna', 'category');
$category_link = get_category_link($category->term_id);
Nie musimy przekazywać term_id, z obiektem term funkcja get_category_link też sobie poradzi:
$category = get_term_by('slug', 'zdrowie-i-medycyna', 'category');
$category_link = get_category_link($category);
Ważne, aby użyć esc_url przy wyświetlaniu naszego linku:
<?php $category = get_term_by('slug', 'zdrowie-i-medycyna', 'category');
$category_link = get_category_link($category->term_id);
?>
<h1><a href="<?php echo esc_url($category_link); ?>" class="cat-link"><?php echo esc_html($category->name);?></a></h1>
Do tego, co wewnątrz tagu HTML – używamy esc_html.
Do tego, co jest urlem – esc_url.
Gdybyśmy mieli atrybut tagu html, który wyświetlamy z backendu – używamy esc_attr.
Gdybyśmy bawili się w jakiś onclick czy inny JavaScript zależny od backendu (raczej tak się bawić nie będziemy, to „zapach” złego kodu) – esc_js.
Zawsze należy pamiętać o bezpieczeństwie naszych aplikacji.
Za pomocą funkcji get_categories możemy pobrać, na przykład, kategorie, ale tylko te, będące głównymi (top-level):
$top_level_categories = get_categories(array(
'parent' => 0
));
Albo możemy pobrać kategorie-dzieci innej kategorii:
$category = get_term_by('slug', 'zdrowie-i-medycyna', 'category');
(...)
$child_categories = get_categories(array(
'parent' => $category->term_id
));
Za pomocą funkcji wp_get_post_categories oraz get_the_ID możemy pobrać np. kategorie główne tylko danego posta:
$post_categories = wp_get_post_categories( get_the_ID(), array( 'fields' => 'all', 'parent' => 0 ) );
Fields all oznacza wszystkie pola, jeżeli potrzebujemy tylko numery id to możemy to określić. Parent 0 czyli kategorie top-level.
Podobnie możemy pobrać tagi danego posta:
$post_tags = get_the_tags();
Jeżeli nie będzie żadnych tagów przypisanych, funkcja zwróci false, co możemy sprawdzić i dostosować naszą logikę do potrzeb:
$post_tags = get_the_tags();
if(!$post_tags)
return array();
Po takich tablicach można iterować jak po wszystkich tablicach w PHP:
$tags = get_the_tags();
(...)
foreach($tags as $tag) {
$html .= "<li>#";
$html .= esc_html($tag->name);
$html .= "</li>";
}
Jeżeli chcemy kategorie tylko wypisać, bez jakiegoś formatowania przesadnego czy robienia linków, możemy użyć funkcji the_category:
<?php the_category( ', ' ); ?>
Podobnie możemy w prosty sposób wyświetlić tagi:
<?php the_tags( 'Tags: ', ', ', '<br />' ); ?>