エントリ中で画像を追加したい場合、プラグイン等は使用せずに 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";
のようにしてあげれば良いでしょう。