多分原因的にかなり稀なケースだとは思うけども、ちょっと嵌まりかけたのでメモ。

テーマとかプラグインの開発をするときは、wp-config.php で define('WP_DEBUG', true); としてデバッグモードで動作させると思うのですが、その状態でもし何かしらのエラーなりが発生していてサイト全体というか、管理画面全体に渡るような警告が出力されちゃってる場合、そのエラーの出ている範囲によってはメディアライブラリが動かなくなる(いつまで経っても一覧が表示されなくなる)ようです。

メディアライブラリの一覧が表示されない問題としては、admin-ajax.php の動作不具合によるものが知られてます。

これは、メディアライブラリの一覧データを取得する際に、admin-ajax.php から JSON でデータを受け取るらしいんですが、そのJSONのヘッダーが application/json でないといけないところが text/html になってしまうと動作しなくなるというものです。

そこで、こちらの記事にあるように admin-ajax.php を修正してみたのですが効果なし。

で、いろいろと調べてみてみたところ、問題が発生している環境では、コアファイルに対しての以下のようなエラー(Notice)が発生しているようで、かなりいろんなページで同じエラーが表示されています。

内容としては、wp-includes/functions.php にて使われている get_current_site_name が非推奨になっているってことらしい。

functions.php といえば、テーマの場合、テーマの中核になるファイルです。テーマに対して様々な機能を有効化したりとか、拡張するための関数をかいたりとか。

ということは、wp-includes の functions.php もコアファイルの中でも結構色んな所で読み込んでるんじゃないのか?もしかしたら、JSONデータを返したりする admin-ajax.php でも読んでいるのではないか、と思い、問題のサイトの admin-ajax.php にアクセスしてみました。(wp-admin以下にあります)

admin-ajax.php は通常ブラウザなどからアクセスすると「0」とだけ表示されます。

ところが、実際にアクセスしてみたところ

となっていました。

つまり、admin-ajax.php でエラーがでたせいで、本来リクエストを受けてJSONを返すべきところで、先にエラーが表示される。

そのために実際にJSONを返すタイミングで application/json をセットしようとしても、既にエラー表示のために text/html がセットされてしまってるため、「headers already sent」となって JSON 用ヘッダーにできなくて、結果的にメディアライブラリの一覧が取得できなくなっていた、とそういうことだとおもいます。

ということで、デバッグモードを解除してエラーが表示されないようにしてみたところ、無事メディアライブラリも動作するようになりました。

まぁ非表示にしただけじゃ実際の問題解決にはなってないんですが、今回みたいにコアファイルに対してNoticeとか吐かれてる状態だとちょっと困りますよね。
自身があるなら修正良いかもしれないですが、できるだけコアファイルには触らないほうが良いと思うし、アップデートかかった時に治っていなければ結局またエラーが出るようになっちゃうわけなので、とりあえずはアップデートによって解消されるのを待つしか無いのかなぁ。

仕方ないのでとりあえずはメディアライブラリをつかう部分のテストをするときだけデバッグモード解除するほうような感じでいこうかと思います。少なくとも業務で使うWPに関してはコアは極力触りたくないので。

“WordPressがデバッグモード中だとメディアライブラリが動かないことがあるっぽい” への2件のフィードバック

  1. white より:

    参考になりました。ありがとうございます!

    • negi より:

      white さん、コメントありがとうございます!
      少しでも参考になったなら嬉しいです。

コメントする