Мне нужно показать облако тегов для всех тегов определенной категории, поэтому я использую функцию для получения всех тегов:
function tags_by_cat($cat_id)
{
$custom_query = new WP_Query("posts_per_page=-1&cat={$cat_id}");
if ($custom_query->have_posts()) :
while ($custom_query->have_posts()) : $custom_query->the_post();
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
$all_tags[] = $tag->term_id;
}
}
endwhile;
endif;
$tags_arr = array_unique($all_tags);
$tags_str = implode(",", $tags_arr);
return $tags_str;
}
а затем я генерирую облако тегов в шаблоне, например, для категории 33:
wp_tag_cloud( array('smallest'=>8,'largest'=>22,'include'=>tags_by_cat(33)));
проблема в том, что, хотя он работает нормально, каждый тег этого облака ссылается на список всех статей, содержащих этот тег, но мне нужно отфильтровать этот список по исходной категории. WordPress уже может это сделать (т.е. http://www.website.com/?cat=33&Тег = вычислительное), но я не могу найти, как ввести параметр URL в URL-адрес облака. Я также использую постоянные ссылки на названия постов, так что, вероятно, все усложняется.
Есть какой-то параметр, чтобы делать то, что я хочу, или, может быть, я могу сделать это с помощью какого-то крючка? Я собирался воссоздать свой собственный wp_tag_cloud, но я не очень уверен, с чего начать
Ну, я наконец-то создал хук, который, кажется, работает правильно, для тех, у кого может быть такая же проблема:
add_filter ( 'wp_tag_cloud', 'tag_cloud_add_cat' );
function tag_cloud_add_cat( $taglinks ) {
if (is_category())
{
$category = get_category( get_query_var( 'cat' ) );
$current_cat_slug = $category->slug;
$tags = explode('</a>', $taglinks);
$regex = "#(.*href=\')(.*)(' class.*)#e";
foreach( $tags as $tag ) {
$varin=strpos($tag,"?")!==false?'&':'?';
$tagres[] = preg_replace($regex, "'$1$2{$varin}category_name={$current_cat_slug}$3'", $tag );
}
$taglinks = implode('</a>', $tagres);
}
return $taglinks;
}
Других решений пока нет …