web-dev-qa-db-ja.com

タグクラウドのツールチップを変更する

タグのツールチップをタグの説明に変更する方法

試してみたところ、私のコードは以下のとおりです。

function title_text( $description ) {
    return sprintf( _n('%s topic', '%s', $description), $description );
}

wp_tag_cloud( array( 'topic_count_text_callback' => 'title_text') );

これはうまくいきません。誰かがこのコードをチェックして私に正しい解決策を見つけてもらえますか?

3
raghu

引数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'";
    }
}

結果

enter image description here

5
fuxia