2014-10-06 81 views
0

我需要顯示特定類別的所有標籤的標籤雲,所以我使用一個函數來檢索所有標籤:使一個特定類別的wordpress標籤雲鏈接到該類別和標籤的文章列表

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; 
}