WordPress のエディタに埋め込むメディア用タグを自動編集する

エントリ中で画像を追加したい場合、プラグイン等は使用せずに WordPress 標準の画像管理機能を使用している。
その際、<a> タグに rel="lightbox" を追加するために 2.3.x 系以前では JavaScript を修正していた。
2.5.x からフィルタ image_send_to_editor が使用できるようになったので、それをフックして自動で <a> タグに rel="lightbox" を追加するようにしてみた。
プラグインにするほどの機能ではなかったので、テーマの functions.php にフィルタ用関数を追加。
もっと、高機能にしてプラグイン化しても良いかも。

書いたフィルタ用関数は、こんな感じ。

function add_image_send_to_editor($html, $id, $alt='', $title='', $align='', $url='', $size='') {
 $wk_html    = "";

 // リンクタグ(<a>) の場合の編集
 if (preg_match("/^<a &#91;^>]*?>.*?<\/a>$/i", $html)) {
  $params   = array();

  if (preg_match_all("/([^ =]*)=[\"']([^\"']*)[\"']/i", preg_replace("/^<a (&#91;^>]*?) ?\/?>.*$/i", "$1", $html), $matches, PREG_SET_ORDER)) {
   // パラメータの抽出
   for ($i=0; $i<count($matches); $i++) {$params&#91;strtolower($matches&#91;$i&#93;&#91;1&#93;)&#93; = $matches&#91;$i&#93;&#91;2&#93;;}
   if (!isset($params&#91;'title'&#93;)) $params&#91;'title'&#93; = $title;
   $params&#91;'rel'&#93; = "lightbox";

   // リンクタグの再構成
   $wk_html .= '<a';
   foreach ($params as $key => $val) {$wk_html .= sprintf(" %s=\"%s\"", $key, $val);}
   $wk_html .= '>';
   $wk_html .= preg_replace("/^<a &#91;^>]*?>(.*?)<\/a>$/i", "$1", $html);
   $wk_html .= '</a>';
  }

  unset ($params);
  unset ($matches);
 }

 // イメージタグ(<img>) の場合の編集
 if (preg_match("/^<img &#91;^>]* ?\/>$/i", $html)) {
  $params   = array();

  if (preg_match_all("/([^ =]*)=[\"']([^\"']*)[\"']/i", preg_replace("/^<img (&#91;^>]*?) ?\/?>$/i", "$1", $html), $matches, PREG_SET_ORDER)) {
   // パラメータの抽出
   for ($i=0; $i<count($matches); $i++) {$params&#91;strtolower($matches&#91;$i&#93;&#91;1&#93;)&#93; = $matches&#91;$i&#93;&#91;2&#93;;}
   if (!isset($params&#91;'alt'&#93;))   $params&#91;'alt'&#93;   = $alt;
   if (!isset($params&#91;'title'&#93;)) $params&#91;'title'&#93; = $title;

   // イメージタグの再構成
   $wk_html .= '<img';
   foreach ($params as $key => $val) {$wk_html .= sprintf(" %s=\"%s\"", $key, $val);}
   $wk_html .= ' />';
  }

  unset ($params);
  unset ($matches);
 }

 return ($wk_html != '' ? $wk_html : $html);
}
add_filter('image_send_to_editor','add_image_send_to_editor');

12行目で rel="lightbox" を追加してます。
$params 配列に入っているパラメータをタグの中に吐き出してるだけなので、他にも独自で追加したい場合は
$params['class']="image";
のようにしてあげれば良いでしょう。

コメントを残す

メールアドレスが公開されることはありません。