Отдельный класс css для каждого тега в облаке тегов wp
Помогите, это, вероятно, лучший способ контролировать стиль wp_tag_cloud...
Я искал способ добавить классы на основе размера в мои теги в виджете облако тегов. Проблема здесь в том, что это решение работает только в том случае, если оно жестко закодировано, например, в файле шаблона, но не для виджета облака тегов.
Я также нашел этот фрагмент для добавления классов слизняков, и они прекрасно работают прямо из коробки. Я просто должен был поместите их внутрь function.php файл.
Я пытался заставить решение номер один работать так же, как работает решение номер два, но с именами классов на основе размера вместо имен слизней или даже обоих. Однако я не могу в этом разобраться и нуждаюсь в помощи. Заранее спасибо.
2 answers
Попробуйте этот код:
add_filter ( 'wp_tag_cloud', 'tag_cloud_font_size_class' );
function tag_cloud_font_size_class( $taglinks ) {
$tags = explode('</a>', $taglinks);
$regex1 = "#(.*style='font-size:)(.*)((pt|px|em|pc|%);'.*)#e";
$regex2 = "#(style='font-size:)(.*)((pt|px|em|pc|%);')#e";
$regex3 = "#(.*class=')(.*)(' title.*)#e";
foreach( $tags as $tag ) {
$size = preg_replace($regex1, "(''.round($2).'')", $tag ); //get the rounded font size
$tag = preg_replace($regex2, "('')", $tag ); //remove the inline font-size style
$tag = preg_replace($regex3, "('$1tag-size-'.($size).' $2$3')", $tag ); //add .tag-size-{nr} class
$tagn[] = $tag;
}
$taglinks = implode('</a>', $tagn);
return $taglinks;
}
Могут быть более эффективные решения или способ объединить все это в одно регулярное выражение; однако это работает (я не эксперт в preg_replace()). может использоваться одновременно с фильтром класса slug.
Возможно, лучший/более простой подход заключается в подключении "wp_generate_tag_cloud_data";)
function tribalpixel_tag_cloud_class($tags_data) {
foreach ($tags_data as $key => $tag) {
$tags_data[$key]['class'] = $tags_data[$key]['class'] ." myCustomClass";
}
return $tags_data;
}
add_filter('wp_generate_tag_cloud_data', ' tribalpixel_tag_cloud_class');
В теге $ у вас есть [идентификатор], [url], [имя], [заголовок], [слизняк], [реальный счет], [класс], [размер шрифта]
Поэтому, если вам нужен пользовательский класс для каждого тега, вы можете использовать что-то вроде:
$tags_data[$key]['class'] = "tag-link-".$tag['slug'];