我需要显示特定类别的所有标记的标记云,因此我使用函数来检索所有标记:
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参数。我也使用帖子名永久链接,这可能会使事情变得更复杂。
是否有一些参数可以做我想要的或者我可以用某种钩子来做它?我打算重新创建自己的wp_tag_cloud,但我不确定从哪里开始
答案 0 :(得分: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;
}