web-dev-qa-db-ja.com

Get_image_tagフィルタを使用するための適切な方法は何ですか?

投稿のサムネイルのtitle属性を削除しようとしています(特定の投稿)。これを行うには、get_image_tagフィルタを使用することをお勧めします。しかし、私がこれまでに得たものはうまくいきません。これを機能させるためには何を変更する必要がありますか?私のコード:

add_filter('get_image_tag', 'image_no_title');
function image_no_title($title) {
    $title = '';
    return $title;
}

そして関連する機能(wp-includes/media.phpから):

function get_image_tag($id, $alt, $title, $align, $size='medium') {

    list( $img_src, $width, $height ) = image_downsize($id, $size);
    $hwstring = image_hwstring($width, $height);

    $class = 'align' . esc_attr($align) .' size-' . esc_attr($size) . ' wp-image-' . $id;
    $class = apply_filters('get_image_tag_class', $class, $id, $align, $size);

    $html = '<img src="' . esc_attr($img_src) . '" alt="' . esc_attr($alt) . '" title="' . esc_attr($title).'" '.$hwstring.'class="'.$class.'" />';

    $html = apply_filters( 'get_image_tag', $html, $id, $alt, $title, $align, $size );

    return $html;
}
1

私が間違った場所にいたことをRarstが指摘してくれたおかげで、私はもう少し掘り下げてこれで終わりました。

add_filter('wp_get_attachment_image_attributes', 'wpse_19029_no_image_title');

function wpse_19029_no_image_title ($attr) 
{
    unset($attr['title']);
    return $attr;
}
3

フィルタは常に最初の引数に影響を与えます。残りは追加情報のためにあり、デフォルトでは渡されません。

add_filter('get_image_tag', 'image_no_title', 10, 4);

function image_no_title( $html, $id, $alt, $title ) {

    return str_replace("title=\"{$title}\"", '', $html);
}
2
Rarst

既存のポストイメージクラス属性にクラスを追加する必要があるという同じ問題がありました。あなたの例のように私のコードは正しかったが、なぜクラスが更新されなかったのか理解できなかった。

私がしたのは、アクションとフィルタの準備が整った後で、メディアライブラリからの画像を投稿/ページに挿入することでした(おすすめの画像とカスタムフィールドに対応)。

それは実際には非常に論理的です。投稿がデータベースに格納され、その後サイトの「フロントエンド」のHTMLを生成するために抽出されたことに気付きましたが、データベースエントリに変更は加えられませんでした。実際には、変更がすぐにサイトに表示されるようにします。

1
benna