WP で rel=“attachment wp-att-*” を削除して挿入しない

WordPressのロゴ。

WordPress で、本文にリンク付きの画像などを挿入するとき、その a 要素に rel="attachment wp-att-*ID" 属性が挿入される問題があります。

WordPress としてはこの rel 属性情報を推奨したいのでしょうが、この属性情報は、W3C の定める rel 属性 (特に HTML5~x ) の規約に違反します。 したがって、この情報を削除したいという人は多いと思います。

手動ではなく自動で削除する

画像の挿入の度に手動で削除指定も良いのですが、それは「テキスト」編集を利用している人しかできません。 また画像の挿入の度にそんなことをしていては、肝心の本文を書く時間が削られてしまいます。できるだけ自動するに越したことはありません。

WordPress ではおあつらえ向きに、image_send_to_editor フィルタが用意されています。このフィルタにフックし、 画像の挿入に必要なテキストを編集して、編集済みのテキストを返せば良いです。

今回は rel 属性を削除したいので、次のようなコードになりますが、例えば class 情報を編集したい場合にも同じフィルタが使えます。

function format_media_html($html, $id)
{
    $html = preg_replace('/\s*rel="attachment\s*wp-att-' . $id . '"\s*/', '', $html);
    return $html;
}
add_filter('image_send_to_editor', 'format_media_html', 10, 2);

正規表現を使って不要な rel 属性情報を削除し、編集済みのテキスト(HTML)を返しています。

実際のところ、正規表現を使わなくても削除することはできるのですが、将来的な仕様の変更に備え、正規表現を採用しました。 正規表現を使うほうが、完全一致の文字列置換と比較して処理コストが大きいですが、編集時にしか機能しない処理ですので、問題になりません。