エントリ中で画像を追加したい場合、プラグイン等は使用せずに 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 [^>]*?>.*?<\/a>$/i", $html)) {
  $params   = array();

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

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

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

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

  if (preg_match_all("/([^ =]*)=[\"']([^\"']*)[\"']/i", preg_replace("/^<img ([^>]*?) ?\/?>$/i", "$1", $html), $matches, PREG_SET_ORDER)) {
   // パラメータの抽出
   for ($i=0; $i<count($matches); $i++) {$params[strtolower($matches[$i][1])] = $matches[$i][2];}
   if (!isset($params['alt']))   $params['alt']   = $alt;
   if (!isset($params['title'])) $params['title'] = $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";
のようにしてあげれば良いでしょう。

コメント

  • twitter 2009年9月16日 水曜日 11:38 AM

    image_send_to_editorなんてフィルターがあったのか。lightboxのタグを入れるのにthe_contentでフックしていたけど、こっちの方が数段良い http://bit.ly/cu7X

コメントする


Twitter ID を入力すると新しいコメントがあった際、 @dogmap_jp が、あなた宛に@リプライでお知らせします。

入力いただいたメールアドレスから、TwitterGravatar に登録されているアイコンを表示します。
(メールアドレスは公開されません)

改行と段落タグは自動で挿入されます。メールアドレスは表示されません。

:mrgreen: :-P :-D :-) ;-) :-o :-| :-( 8-O :-? 8-) :twisted: :evil: :oops: :roll: :cry: :lol: :-x more »