タグのツールチップをタグの説明に変更する方法
試してみたところ、私のコードは以下のとおりです。
function title_text( $description ) {
return sprintf( _n('%s topic', '%s', $description), $description );
}
wp_tag_cloud( array( 'topic_count_text_callback' => 'title_text') );
これはうまくいきません。誰かがこのコードをチェックして私に正しい解決策を見つけてもらえますか?
引数topic_count_text_callback
は、用語IDと分類法を引数として取得しないため、必要な処理を実行できません。これはコアで修正されるべきです。 そのためのパッチを後で書くつもりです。
更新:私は チケット#21198 のパッチを書きました。マイルストーンは3.6なので、次の答えは最終的に古くなります。それではこの記事を更新します。
しかし、すべての希望が失われるわけではありません。生成されたマークアップをwp_tag_cloud
でフィルタリングし、それに正規表現を実行して、class
属性から用語IDを抽出し、2番目のパラメータ$args
から分類法を抽出できます。次に、用語IDと分類法を使用して用語の説明を取得し、元のtitle属性を置き換えます。
add_filter(
'wp_tag_cloud', # filter name
array ( 'WPSE_78426_Tag_Cloud_Filter', 'filter_cloud' ), # callback
10, # priority
2 # number of arguments
);
/**
* Replace title attribut in a tag cloud with term description
*
* @author toscho http://toscho.de
*/
class WPSE_78426_Tag_Cloud_Filter
{
/**
* Current taxonomy
*
* @type string
*/
protected static $taxonomy = 'post_tag';
/**
* Register current taxonomy and catch term id per regex.
*
* @wp-hook wp_tag_cloud
* @uses preg_callback()
* @param string $tagcloud Tab cloud markup
* @param array $args Original arguments for wp_tag_cloud() call
* @return string Changed markup
*/
public static function filter_cloud( $tagcloud, $args )
{
// store the taxonomy for later use in our callback
self::$taxonomy = $args['taxonomy'];
return preg_replace_callback(
'~class=\'tag-link-(\d+)\' title=\'([^\']+)\'~m',
array ( __CLASS__, 'preg_callback' ),
$tagcloud
);
}
/**
* Replace content of title attribute.
*
* @param array $matches
* $matches[0] = complete matched string,
* $matches[1] = term id,
* $matches[2] = original content of title attribute
* @return string
*/
protected static function preg_callback( $matches )
{
$term_id = $matches[1];
// get term description
$desc = term_description( $term_id, self::$taxonomy );
// remove HTML
$desc = wp_strip_all_tags( $desc, TRUE );
// escape unsafe chacters
$desc = esc_attr( $desc );
// rebuild the attributes, keep delimiters (') intact
// for other filters
return "class='tag-link-$term_id' title='$desc'";
}
}