WP4.4 と wp-jquery-lightbox

 
元気な雑草たち 

20151212-1

WordPress を 4.4 へアップしたら え? と思う様な事になりました。

何も考えずに 4.4 へ更新したのですが、メディアを追加すると大きな画像へのリンクが無く、いきなりイメージタグになったり Lightbox が効かなくなったりと、少しだけパニックになりました。
4.4 のバグか Lightbox の未対応を疑い一度は 4.3.1 へ戻したのですが、仲間内で色々調査検証した結果、プラグインを修正して回避する事ができたので、その方法をシェアします。

大きな画像へのリンク

20151212-2

4.4 へアップするとなんで画像のリンクが無くなったんだ? 仕様変更か? と思ったら 「メディアを追加」する時のリンク先が「なし」に初期化されていました。
一度設定したら 2度と触らないオプションなので全然気付きませんでしたよ(笑) ここを「メディアファイル」とする事で画像リンクの件は完了。

残る問題は Lightbox が効かなくなってしまったこと。

Lightbox は HTML 生成時に自動で「rel=”lightbox”」という属性を追加します。この属性があると Lightbox が実行されるようになっているんですね。そして WP 4.4 からリンク先をメディアファイルとすると「rel=”attachment ~」という属性が追加されるようになっていました。どうやら「rel=」が 2個あるおかげで Lightbox が動作しない様です。(たぶん)

プラグインを編集

20151212-3

ということで、wp-jquery-lightbox.php を編集してみましょう。

wp-jquery-lightbox.phpの修正

20151212-4

ソースをチェックすると出力文字列にアンカータグと画像が含まれている場合 rel=”lightbox” を挿入していました。ここに rel=”attachment を無力化するコードを追加すれば良さそうなので、rel=”attachment があれば rel_wp=”attachment へ変換するようにしてみました。
実行してチェックすると Lightbox が動いたので、当面はこれで回避出来そうです。rel=”attachment がどの様な事に使われるのかはわかりませんので、気になる方はプラグインのアップデートを待った方がいいでしょう。おそらく rel=”lightbox” を rel-lb=”lightbox” 等へ変える様な修正になるのではないかと期待しています。

以下にコピペ可能なコードを記しておきます。

wp-jquery-lightbox 1.4.7 の修正箇所
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 修正するのは /wp-content/plugins/wp-jquery-lightbox/wp-jquery-lightbox.php
 
// オリジナルの関数
/*
function jqlb_do_regexp($content, $id){
	$id = esc_attr($id);			
	$pattern = "/(<a(?![^>]*?rel=['\"]lightbox.*)[^>]*?href=['\"][^'\"]+?\.(?:bmp|gif|jpg|jpeg|png)(\?\S{0,}){0,1}['\"][^\>]*)>/i";
	$replacement = '$1 rel="lightbox['.$id.']">';
	return preg_replace($pattern, $replacement, $content);
}
*/
// 修正した関数
function jqlb_do_regexp($content, $id){
	$id = esc_attr($id);			
	$pattern = "/(<a(?![^>]*?rel=['\"]lightbox.*)[^>]*?href=['\"][^'\"]+?\.(?:bmp|gif|jpg|jpeg|png)(\?\S{0,}){0,1}['\"][^\>]*)>/i";
	$replacement = '$1 rel="lightbox['.$id.']">';
 
	/* begin - add delphian */
	$ret = preg_replace($pattern, $replacement, $content);
 
	if (stristr($ret, 'rel="attachment')){
		$ret = str_replace('rel="attachment', 'rel_wp="attachment', $ret);
	}
 
	//return preg_replace($pattern, $replacement, $content);
	return $ret;
	/* end - add delphian */
}

  1. bluem

    おはようございます(^^
    これは助かります!早速コードを足しておこうと思います。
    いつもはテストサイトを先にアプデして様子を見てからブログサイトをやってましたが、ずっと問題なかったので警戒もなしにブログサイトを初めにやったら、こんな事になってしまいました(笑)

    1. delphian

      いや~ 4.4にアップしたらちょっとビビリましたね~(笑)
      冷静にチェックしていくと自分で対応出来ることが分かったので一安心でしたよ。

  2. iMovie

    こんにちは
    情報ありがとうございます。
    bluemさんと同じで、何の警戒もなくアップデートしたら、様子が変なので焦りました。
    早速、記事の通りに修正したところ、今まで通りに使えるようになりました。
    リンク先が「なし」になっているのは気づいたのですが、その先どうすればよいのか、まったく判りませんでしたから・・・

    1. delphian

      プラグインというか、PHPの改造はハードルが高いので難しいですよね。
      この部分は以前に手を入れたことがあったのでどこを修正すれば良いのかすぐに見当がつきましたよ。

  3. jerry

    いろいろ面倒だったようですがすぐに対応できるのが流石ですね!
    私のとこはまだ4.4にアップデートしてませんので、当面そのままで行こうと思います。

    1. delphian

      どうせいつかはアップしなければいけないし、対応方法も分かっているのでアップしちゃおう。ま、アップしないという選択もありですね(笑)

  4. reota

    久々のWPネタですね、最近はWPの方が安定稼働しすぎです!
    たまにはこういうトラブルがあった方が面白いですね。
    解決できる人がいるからこそ、でしょうけど^^;

    1. delphian

      いや~ WPがプログラムの集合体だというのを認識する瞬間ですね。
      軽微なヤツなら自分でなんとかできるというのもシステムとしては好ましいです。
      WPはナイスです(笑)

  5. ask-evo

    にーさんにLightbox対応してもらって、これでOKと思ったら、「メディアファイル」の設定を忘れてあれっ?ってなりましたw

    でも、無事に解決です。
    いつもありがとうございます

    どうか自分より長生きしてくださいw

    1. delphian

      なんでメディアファイル部分の初期化が必要だったんでしょうね。まか不思議~
      そのおかげで WP の仕様が変わったと思い込んでしもーたがな(笑)
      長生きはしまっせー 200歳まで生きる予定だす。

  6. YOKO*

    実に鮮やかなご対応、さすがでございます〜。
    いつもその恩恵に与り、大変光栄に思います。

    なんか夜中で寝惚けているせいか、お堅い文章だわー
    と思いつつ、取り敢えずお礼を申し上げに参りました。
    ありがとうございました。。。

    1. delphian

      いえいえ、どういたしまして。
      原因が単純だったので簡単な対処で済みましたね。
      あれれ? となっている人、多いんだろうなぁ~ と想像しています。

  7. シトリン

    はじめまして
    同じ現象にて悩んでいたところ、この記事に出会いました。
    お陰様で助かりました。
    まさに神の記事と呼ばせて頂きます。
    ありがとうございました。
    うちのブログにdelphianさんのブログを紹介させてもらいました(^◇^)

    1. delphian

      シトリンさん、いらっしゃいませ。
      お~ やはり同じ現象で困りましたか。困った方は全世界にいるんでしょうね(笑)
      とりあえずの対処療法ですが、プラグインをアップデートして欲しいですね。