タグクラウドは便利だと思うんだけど、自分的にちょっと使いづらい。
普通にタグ表示すると、全カテゴリーのタグが表示される。
表示しているカテゴリーに属しているタグを表示するには以下。
// function.php
function my_category_tag_cloud($args) {
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'echo' => true
);
$args = wp_parse_args( $args, $defaults );
global $wpdb;
$query = "
SELECT DISTINCT terms2.term_id as term_id, terms2.name as name, t2.count as count
FROM
$wpdb->posts as p1
LEFT JOIN $wpdb->term_relationships as r1 ON p1.ID = r1.object_ID
LEFT JOIN $wpdb->term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
LEFT JOIN $wpdb->terms as terms1 ON t1.term_id = terms1.term_id,
$wpdb->posts as p2
LEFT JOIN $wpdb->term_relationships as r2 ON p2.ID = r2.object_ID
LEFT JOIN $wpdb->term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
LEFT JOIN $wpdb->terms as terms2 ON t2.term_id = terms2.term_id
WHERE
t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id = " . $args['cat'] . " AND
t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
AND p1.ID = p2.ID
";
$tags = $wpdb->get_results($query);
foreach ( $tags as $key => $tag ) {
if ( 'edit' == $args['link'] )
$link = get_edit_tag_link( $tag->term_id, $args['taxonomy'] );
else
$link = get_term_link( intval($tag->term_id), $args['taxonomy'] );
if ( is_wp_error( $link ) )
return false;
$tags[ $key ]->link = $link;
$tags[ $key ]->id = $tag->term_id;
}
$return = wp_generate_tag_cloud( $tags, $args );
$return = apply_filters( 'wp_tag_cloud', $return, $args );
if ( 'array' == $args['format'] || empty($args['echo']) )
return $return;
echo $return;
}
function my_category_tag_cloud($args) {
$defaults = array(
'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
'format' => 'flat', 'separator' => "\n", 'orderby' => 'name', 'order' => 'ASC',
'exclude' => '', 'include' => '', 'link' => 'view', 'taxonomy' => 'post_tag', 'echo' => true
);
$args = wp_parse_args( $args, $defaults );
global $wpdb;
$query = "
SELECT DISTINCT terms2.term_id as term_id, terms2.name as name, t2.count as count
FROM
$wpdb->posts as p1
LEFT JOIN $wpdb->term_relationships as r1 ON p1.ID = r1.object_ID
LEFT JOIN $wpdb->term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
LEFT JOIN $wpdb->terms as terms1 ON t1.term_id = terms1.term_id,
$wpdb->posts as p2
LEFT JOIN $wpdb->term_relationships as r2 ON p2.ID = r2.object_ID
LEFT JOIN $wpdb->term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
LEFT JOIN $wpdb->terms as terms2 ON t2.term_id = terms2.term_id
WHERE
t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id = " . $args['cat'] . " AND
t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
AND p1.ID = p2.ID
";
$tags = $wpdb->get_results($query);
foreach ( $tags as $key => $tag ) {
if ( 'edit' == $args['link'] )
$link = get_edit_tag_link( $tag->term_id, $args['taxonomy'] );
else
$link = get_term_link( intval($tag->term_id), $args['taxonomy'] );
if ( is_wp_error( $link ) )
return false;
$tags[ $key ]->link = $link;
$tags[ $key ]->id = $tag->term_id;
}
$return = wp_generate_tag_cloud( $tags, $args );
$return = apply_filters( 'wp_tag_cloud', $return, $args );
if ( 'array' == $args['format'] || empty($args['echo']) )
return $return;
echo $return;
}
テーマ側では
my_category_tag_cloud('cat=123'); // カテゴリーIDを指定
または、
foreach((get_the_category()) as $cat) {
$cat_id = $cat->cat_ID ;
break ;
}
$query = 'cat=' . $cat_id;
my_category_tag_cloud($query);
$cat_id = $cat->cat_ID ;
break ;
}
$query = 'cat=' . $cat_id;
my_category_tag_cloud($query);
素晴らしいエントリーありがとうございます。
ただ、これを試してみたのですが、当方の場合、
サイドバーに入れても、どうも表示されません。
コードが高度すぎて、解析不能ですが、
原因がどんなところが予想できるでしょうか?
echoが抜けていませんか?
GeSHi Error: GeSHi could not find the language wp (using path /home/users/0/mweb/web/webpaprika.com/wordpress/wp-content/plugins/codecolorer/lib/geshi/) (code 2)
または
GeSHi Error: GeSHi could not find the language wp (using path /home/users/0/mweb/web/webpaprika.com/wordpress/wp-content/plugins/codecolorer/lib/geshi/) (code 2)
まさにこのコードを探しておりました!!
ありがとうございます!
タグのtitleが「○件のトピックス」と表示されておりますが、
「タグ (○件)」と表示するにはどうしたらいいのでしょうか?
よろしければご教授願えませんでしょうか?
よろしくお願いします。
検証していませんが、「wp_generate_tag_cloud」には、
があって、標準のアウトプット形式が「○件のトピックス」になるようです。
default_topic_count_textの内容は
こんな感じなので、2行目の「$defaults」の指定で最後の行に「my_topic_count_text」を追加して
functions.phpにmy_topic_count_textを追加して
とすると意図した形式で表示されるのではないかと思います。
意図した形式で表示されない場合は、「single_text」「multiple_text」というオプションもあるようなので、
これでもOKなのかなぁ?と思います。