WordPress 5.5以降 テーマやプラグインが壊れる&画像が表示されない不具合対策
WordPressの自動更新で大型アップデートを行った後、Webサイト表示の画像が表示されなかったり、表示レイアウトが崩れるなど、予期せぬトラブルが発生しているまま修正に困り果てている人も多いのではないでしょうか。
そんな私も、他に管理するWordPress構成のサイトで画像がユーザーログイン後、画像が表示されない問題が発生したためかなりの時間を要して修正を試みましたが、直接的な原因を把握できぬまま時間が立ってしまいました。
BuddyPressなどを利用したユーザー登録型のコミュニティーサイトでは、ログイン後に画像が表示されなかったり記事がサムネイルごと表示されないなど致命傷となる問題が発生していました。
ここではその原因と暫定的な対策を記載したいと思います。
トラブルの原因はjQuery-migrateとLive / on記述の変更
このトラブルの原因はjQueryのメソッドが仕様変更になり、LiveなどのメソッドがWordPressアップデートで使えなくなったため、プラグインやテーマに記述されているBind/Liveが実行できずにエラーになるためテンプレートが崩れたり、プラグインが動かない事態となり一部で混乱する自体になりました。
jQuery | Bind | Live | delegate | on | 備考 |
1.7まで | ○ | ○ | ○ | × | 移行前 |
1.7 | △ | △ | △ | ○ | 仕様変更による移行期間 |
1.9以降 | × | × | × | ○ | 仕様変更後 |
更に残念なのはjquery-migrate
として知られている移行ツールがデフォルトで有効にならなくなりWordPress5.7ではjQuery-migrate自体が存在しない(サポートしない)ためにクラシックエディターやプラグインなどの古い記述に対しても表現できなくなってしまっています。
Google Cromeだと「その他のツール」-「デベロッパーツール」でConsoleからエラーが確認できるので、そのエラーにTypeError: $(…).live is not a functionやjQueryの表示がある場合、この問題に該当するので実際に問題が起きていて、この情報を検索表示されているのであれば暫定的な解決ができるかと思う。
暫定的な解決方法
この問題の根本的解決はテーマやプラグインに記述されているLiveやbindをjQuery1.9以降で指示されたonに変更することだが、テーマやプラグイン作者が変更を行わない限り、自力でソースの変更が求められる。
この部分に関しては多くのサイトでPHPソースの変更方法が取り上げられているので検索コード:jQuery Live onなどで検索すると幸せな解決が望めると思う。
自力修正が難しいユーザーも多いと思うため、暫定的な解決を記載したいと思います。
あまりにもこの問題が根が深いため、WordPress Teamの有志がEnable jQuery Migrate Helperというプラグインを公開しています。
このプラグインでは一時的に旧コードの実行ができるjQuery以降のためのコードテスト動作確認などの作業用ツールですが、暫定的な対策としても使用できます。
なぜ暫定なのか?
jQueryはBindやLive記述はonに置き換わり、すべての記述は置き換わることが前提になっていますので旧サポートは行わないことが正式に決まっているため暫定となります。
このEnable jQuery Migrate Helperをプラグインとして実行した場合下記のような警告が表示されます。
jQuery Migrate Helper————————————————————————————
現在は、Enable jQuery Migrate Helper プラグインを使用して、jQuery JavaScript ライブラリの非推奨関数を使用する古い JavaScript コードのサポートを有効にしています。
これは WordPress 5.5.0 と 5.6.0 の間でのみ機能する一時的な解決策であり、サポートされていないコードの永続的な修正を意味するものではないことに注意してください。
警告が表示された場合は、更新のためにそれらを生成したテーマまたはプラグインを確認する必要があります。おそらくインストールできるものがあるでしょう。 プラグインやテーマを更新して、警告が出なくなったら、Enable jQuery Migrate Helper を無効化してください。
* スクリプト、ファイル、他のいくつかのコードは、開発者がより最新のコードに置き換えたり、完全に削除したりしている場合には、非推奨となります。
よって、いつかは対策が必要となります。
私の場合は海外の有料テーマであるKLEOテーマとK-Elementsプラグインでこの問題が発生しました。
このテーマ開発者は有料販売し開発継続していますが未だLiveをonに変更しておらず、先に上げた通りユーザーログイン後に画像が表示されなかったり、検索記事がまるごと消えたりするトラブルが続いています。
日本国内でKLEOを使っているユーザーも多少なりともあると思いますが、同じ問題が発生していると思いますので、自分でソース書き換えができないならばWordpress5.6まではこの暫定で対応できます。