W WordPressie mamy funkcję the_tags, która w dodatku pozwala nam przyjąć argumenty before, separator i after, co pozwana na kontrolę tego jak wyświetlane są tagi. W większości prostych przypadków to powinno wystarczyć, natomiast jeżeli chcemy mieć więcej kontroli, musimy własną funkcję napisać.
Zaczniemy od tego, że tagi mają mieć maksymalny limit, który możemy ustalić. Tagów może nie być w ogóle, ale nie mają prawa przekroczyć określonego przez nas limitu.
A zatem, mamy mieć funkcję, która pozwoli, na przykład, wyświetlić maksymalnie 3 tagi, nie więcej.
Piszemy pierwszą funkcję:
function grab_tags($limit){
$post_tags = get_the_tags();
if(!$post_tags)
return array();
$output_tags = array();
$cnt = 0;
while($cnt < count($post_tags) && $cnt < $limit){
$output_tags[] = $post_tags[$cnt++];
}
return $output_tags;
}
Przyjmujemy limit, zaciągamy tagi przez get_the_tags. Jeżeli get_the_tags nie znajdzie żadnych, zwróci fałsz. Poprawiamy to, zwracając pustą tablicę.
Tworzymy tablicę output i przechodzimy po ilości tagów, dodając kolejne do niej. Jest też jeszcze jeden warunek – nie można przekroczyć limitu, nawet jeżeli jeszcze jakieś tagi zostały.
Teraz funkcja wyświetlająca tagi:
function display_tags($tags){
$html = "<ul>";
foreach($tags as $tag) {
$html .= "<li>#";
$html .= esc_html($tag->name);
$html .= "</li>";
}
$html .= "</ul>";
return $html;
}
Proste. Jest to swego rodzaju odpowiednik takiego zapisu, ale bierzemy pod uwagę limit:
<?php the_tags( '<ul><li>#', '</li><li>', '</li></ul>' ); ?>
Teraz funkcja wyświetlająca tagi:
function tags_facade($limit=3){
$tags = grab_tags($limit);
if(empty($tags)){
return;
}
echo display_tags($tags);
}
Jeżeli tagów nie ma, nic nie zostanie wyświetlone. Choć po prawdzie można po stronie kodu danego template użyć funkcji has_tags i wtedy coś wyświetlić albo nie.
Nic nie stoi na przeszkodzie, żeby te dwa podejścia połączyć i za pomocą has_tags sprawdzić, czy tagi są, jeżeli nie, to coś innego wyświetlić. Natomiast nasza funkcja-fasada sama z siebie nie wyświetli nic przy pustych tagach.
Może nas kusić, aby użyć strtoupper w funkcji drugiej, ale z doświadczenia powiem, że do zapisywania wielką literą bardziej przydaje się CSS. Tutaj z kodowaniem znaków bywa różnie i nie zawsze działa w 100% poprawnie.