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 />' ); ?>