Проверить, используется ли метка в записях
Я использую метки сайта для глоссария. Я хотел бы отображать ссылку на страницу с меткой, если она существует, в противном случае просто показывать название метки. Есть ли проверка, которая позволит мне определить, используется ли метка в записях?
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
if ($tag->description) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Просмотреть все записи в %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
(Рабочее) Обновление по рекомендации Chip'а
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
if ($tag->description) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
if ( 0 < $tag->count ){
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Просмотреть все записи в %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a>';
} else {
echo $tag->name;
}
echo '</strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
Пример конечного результата https://i.sstatic.net/Ph751.png
Попробуйте использовать условный тег шаблона has_tag()
. Например, для проверки наличия тега "foobar":
<?php
if ( has_tag( 'foobar' ) ) {
// Текущая запись имеет тег "foobar";
// выполняем какие-то действия
} else {
// Текущая запись НЕ имеет тега "foobar";
// выполняем другие действия
}
?>
Если вы находитесь внутри цикла (Loop), просто вызовите <?php has_tag( $tag ); ?>
; если вы снаружи цикла, вам нужно передать ID записи: <?php has_tag( $tag, $post ); ?>
Приблизительный вариант вашего кода:
$tags = get_tags( array( 'hide_empty' => false ) );
if ( $tags ) {
foreach ( $tags as $tag ) {
if ( has_tag( $tag->slug ) ) {
// Текущая запись имеет тег $tag;
// выводим ссылку на тег
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Просмотреть все записи в %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
} else {
// Текущая запись НЕ имеет тега;
// выводим только название тега
echo $tag->name;
}
}
}
РЕДАКТИРОВАНИЕ
Другая мысль: если вы получаете список терминов произвольно и хотите определить, используется ли этот термин как тег записи, можно попробовать использовать условную функцию term_exists()
; например, чтобы проверить, используется ли 'foobar' как тег записи:
<?php
if ( term_exists( 'foobar', 'post_tag' ) ) {
// Термин 'foobar' используется как тег записи;
// выполняем какие-то действия
}
?>
Но я всё ещё не до конца понимаю источник ваших "тегов" в данном случае.
РЕДАКТИРОВАНИЕ 2
Теперь мы будем запрашивать теги, у которых количество использований больше нуля (т.е. тег был использован хотя бы в одной записи):
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
if ( 0 < $tag->count ) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
if ( has_tag( $tag->slug ) ) {
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Просмотреть все записи в %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a>';
} else {
echo $tag->name;
}
echo '</strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}

Да, это находится вне цикла. Я попробовал оба ваших предложения, но они, кажется, не сработали. Похоже, что условие просто пропускается if ( has_tag( $tag->slug ) ) {
. Я обновил свою запись, вы можете увидеть это в действии здесь http://www.openeye.net/glossary

Смотрите обновлённый ответ. Откуда вы получаете массив терминов глоссария?

Я вручную создал многие из тегов и добавил описание. Мы уже используем многие термины на сайте и планируем использовать все, когда добавим раздел вопросов и ответов.

"Я вручную создал многие теги и добавил описание." - значит, это существующие теги записей, но вам нужно узнать, больше ли количество нуля? Это ещё проще!

Это сработало, однако я переместил ( 0 < $tag->count )
из-под foreach туда, где был has_tag( $tag->slug )
. Теперь, если у записи есть описание, оно будет отображаться в списке, а если метка связана с записью, будет показана ссылка. Отличная работа, Chip! Я обновил свою запись рабочим кодом.

Вы можете использовать поле count, возвращаемое из get_tags
, чтобы проверить, есть ли у тега записи или нет, например так:
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
//проверяем количество записей у тега
if($tag->count > 0){
//тег используется в записях
if ($tag->description) {
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Посмотреть все записи в %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}else{
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Посмотреть все записи в %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt>';
}
}else{
//нет записей
echo $tag->name;
if ($tag->description)
echo '<dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
