На веб-странице одиночной записи блога на WordPress обычно выводятся метки этой записи. В некоторых случаях возникает необходимость исключить метки, используемые в служебных целях, например, как в первом примере в статье Как связать постоянные страницы с записями блога. Рассмотрим несколько способов исключения меток.
Функция the_tags выводит ссылки на метки записи, а функция get_the_tags возвращает объекты меток записи (См. Функции для работы с метками) .
Явное задание меток
Если для вывода меток используется функция get_the_tags, добавляем в файл functions.php (или в файл плагина) следующий код. Функция фильтрации exclude_tags, возвращающая массив со всеми метками записи кроме заданных меток, добавляется как фильтр для функции get_the_tags:
<?php function exclude_tags($tags) { foreach ($tags as $tag) switch ($tag->name) { // явное указание меток, которые нужно исключить: case 'tag-to-exclude1': case 'tag-to-exclude2': break; default: // остальные метки добавляются в массив $newtags[] = $tag; } return $newtags; } add_filter( 'get_the_tags', 'exclude_tags'); ?>
О функции add_filter см. в статье "Фильтры"
Исключение меток с заданными именами
Эту функцию нужно использовать вместо the_tags. Искомые имена задаются как список в $exclude:
<?php function pk_the_tags( $before = '', $sep = ', ', $after = '', $exclude = '' ) { $tags = get_the_tags(); if ( empty( $tags ) ) return false; $tag_list = $before; foreach ( $tags as $tag ) { if (!empty($exclude)) $pos = stripos( $exclude, $tag->name); else $pos = false; if ($pos=== false) $tag_links[] = '<a href="' . get_tag_link($tag->term_id) . '">' . $tag->name . '</a>'; } if (empty($tag_links)) return false; $tag_links = join( $sep, $tag_links ); $tag_links = apply_filters( 'the_tags', $tag_links ); tag_list .= $tag_links; $tag_list .= $after; echo $tag_list; } ?>
Например, исключение тегов WordPress и Blogger:
<?php if (get_the_tags()) pk_the_tags('', ', ', '', 'Wordpress, Blogger'); ?>
Пожалуйста, подскажите, как можно исключить ссылку на метку на странице архива конкретной метки?
Если новость имеет метки Кино и Актер и эта новость отображается на странице архива метки Кино, то отображать только ссылку на метку Актер. То есть исключить отображение ссылки на метку текущего архива.