2014-10-06 2 views
0

Мне нужно показать облако тегов всех тегов определенной категории, поэтому я использую функцию для извлечения всех теги:сделать wordpress тегом облако определенной категории ссылку на список статей этой категории & tag

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&tag=computing), но я не могу найти, как ввести параметр url в URL-адресах облака. Я также использую постоянные ссылки для почтовых сообщений, поэтому, возможно, это осложняет ситуацию.

Есть ли какой-то параметр, чтобы делать то, что я хочу, или, может быть, я могу это сделать с помощью какого-то крючка? Я собирался воссоздать свой собственный wp_tag_cloud, но я не очень уверен, где начать

ответ

0

Ну я, наконец, создал крюк, который, кажется, работает должным образом, для тех, кто может иметь ту же проблему:

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; 
} 
Смежные вопросы