Иногда требуется ограничить количество меток, которые выводятся в записи. Это может быть продиктовано дизайном используемой темы (слишком много меток не помещаются в отведенное для них пространство), либо может быть мерой продосторожности, защитой от дурака, например, в блогах, где посты могут без модерации публиковать пользователи, которые не склонны думать за вебмастера, И ставят столько меток, сколько душе угодно.
Конечно, простейшим решением было бы вообще запрет на использование меток, но зачем отказываться от такого удобного способа перелинковки и фильтрации постов по схожей тематике? Достаточно просто ограничить количество меток, выводимых в посте, до нужного вам количества.
Способ первый — глобальный
Если вы выводите метки стандартным способом, с помощью функции the_tags(), то ограничить количество выводимых ею меток можно, добавив простой фильтр в файл functions.php используемой вами темы:
add_filter('term_links-post_tag','limit_tags'); function limit_tags($terms) { return array_slice($terms,0,10,true); }
Этот код ограничивает количество выводимых меток десятью. Вы можете изменить это количество на то, которое вам нужно.
Способ второй — локальный
Так же можно использовать код, который для ограничения количества выводимых меток будет использовать стандартную функцию get_the_tags(), непосредственно в файле шаблона (например, в single.php, index.php). Для этого добавьте в файл шаблона:
<?php $posttags = get_the_tags(); $count=0; $sep=''; if ($posttags) { echo 'Теги: '; foreach($posttags as $tag) { $count++; echo $sep . '<a target="_blank" rel="nofollow" href="">term_id).'">'.$tag->name.'</a>'; $sep = ', '; if( $count > 4 ) break; } } ?>
За количество выводимых меток отвечает строчка
if( $count > 4 ) break;
Так как в программировании отсчет начинается с цифры 0, то 4 говорит о том, что будет выводиться 5 меток. В этом коде так же задается разделитель между метками:
$sep = ', ';
Сейчас это запятая с пробелом после нее, но вы можете изменить разделитель на другой, например, поставить слэш:
$sep = '/ ';
Заключение
Оба способа являются равнозначными, просто первый задает количество меток, которое действует глобально, ограничивая их везде, где используется функция the_tags(). Второй способ является индивидуальным — с его помощью вы можете задавать разное количество меток, выводимых в разных местах. Например, вы можете в шаблоне index.php выводить пять меток, а в single.php десять.
Стоит заметить, что эти два способа органичения количества меток влияют только на вывод. При редактировании и сохранении поста в базу данных все равно будут попадать все метки, которые вы укажете. Если вы решите отказаться от ограничения количества меток, то просто удалите используемый код, и вы увидите все метки, которыми помечен пост.
Первый способ получился, но я хочу чтобы на главной в анонсах было ограниченное количество меток, а в полной записи уже были видны все метки.
Однако, при добавлении кода из второго способа, пишет ошибку: Parse error: syntax error, unexpected ‘”‘, expecting ‘,’ or ‘;’ в строчке
echo $sep . ‘term_id).'”>’.$tag->name.’‘;
Подскажите, как быть?
В выражении echo $sep . ‘term_id).'”>’.$tag->name.’‘; пропущена кавычка после term_id)