2014-10-06 82 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; 
}