最新版Cocoonにて謎のエラーを確認
先日この記事にて久しぶりに更新された当ブログであるが、そのとき溜まりに溜まっていたプラグインやテーマの更新も行った。その際、使用させてもらっているテーマ「Cocoon」も最新バージョンの「2.8.4.1」になったわけだが、どういうわけか、それからWordPressの投稿編集画面にてメディアライブラリ(画像や動画などのメディアデータを格納している場所)を開けなくなった。
具体的な症状としては、「アイキャッチ画像を設定」を押しても無反応で、同じく「画像」ブロックから「メディアライブラリ」を押しても何も起こらない、といった具合だ(新規でアップロードして画像を貼ることはできる)。厳密にはCocoonの子テーマを有効にしている当ブログは、子テーマに多くの改造を施してしまっているので、ついにそちらの記述が最新版の機能に干渉してしまったのかと、最初こそそう思っていた。
しかしCocoon本体を有効にした場合でも同様の症状が見られたので、目下子テーマが原因ではないと結論付けた(親テーマを有効にした場合は子テーマの影響はなくなるため)。また念のため他のテーマ(Twenty Twenty-Three)を有効にしてみた結果、何の問題もなくメディアライブラリが開けたので、やはり最新版Cocoonが原因だと断定するに至った。
エラーの詳細
管理者ツールのコンソール画面でエラーの詳細を確認したところ、以下のようなエラーが出ていることが発覚した。
post-edit.js?ver=21fb8c933776b5a79506&fver=20250223072453:31 Uncaught TypeError: Cannot read properties of undefined (reading 'frame')
at post-edit.js?ver=21fb8c933776b5a79506&fver=20250223072453:31:10560
at HTMLDocument.<anonymous> (post-edit.js?ver=21fb8c933776b5a79506&fver=20250223072453:31:11874)
どうもテーマ内の「post-edit.js」に書かれている「frame」プロパティを読み込もうとしたが、「undefined」だったということらしいが、俺にはさっぱりチンプンカンプンだ。まぁ結局のところ、Cocoonを最新版に更新した際に、JavaScriptの依存関係に問題や競合が発生したということなのだろう。
ここから「アイキャッチ画像を設定」を押すと次のエラーが出てくる。
react-dom.min.js?ver=18.3.1.1&fver=20241113111004:10 Uncaught Error: Template not found: #tmpl-media-modal
at n.template (wp-util.min.js?ver=6.7.2&fver=20241008121647:2:371)
at n.render (wp-backbone.min.js?ver=6.7.2&fver=20241008121647:2:2895)
at n.attach (media-views.min.js?ver=6.7.2&fver=20241113111004:2:86078)
at n.open (media-views.min.js?ver=6.7.2&fver=20241113111004:2:86461)
at s.<computed> [as open] (media-views.min.js?ver=6.7.2&fver=20241113111004:2:83610)
at d.openModal (media-utils.min.js?ver=e10cc6bfcff4fe474479&fver=20241113111004:2:5562)
at n.<computed> (components.min.js?ver=fe486283a957ca5ed7c6&fver=20250212122542:19:24767)
at Object.Xa (react-dom.min.js?ver=18.3.1.1&fver=20241113111004:10:105719)
at B (react-dom.min.js?ver=18.3.1.1&fver=20241113111004:10:10501)
at W (react-dom.min.js?ver=18.3.1.1&fver=20241113111004:10:10556)
またまたチンプンカンプンだ。「#tmpl-media-modal」というテンプレートが見つからないために「react-dom.min.js」で「Uncaught Error」が発生しているらしい。「#tmpl-media-modal」がメディアライブラリのモーダルウィンドウを指すであろうから、つまるところは「それがなかったので開けません」と言っているにすぎないのか?
念のため、実際のコンソール画面の画像を貼っておく(なおエラーに関係ない部分は一部省いている)。

Yoast SEOも怪しい?
最初の待機状態で出ているエラーの、問題となっている「post-edit.js」内の該当箇所を見てみると、次のような部分だった。
var o = wp.media.featuredImage.frame();
if ("undefined" == typeof YoastSEO)
return;
見たところ、「wp.media.featuredImage.frame()」という「WordPress のメディアライブラリのフレームを取得する関数」の戻り値が「undefined」になっていることがエラーの原因らしい。記事のアイキャッチ画像(featured image)を設定するメディアフレームを管理するオブジェクト o を取得したいのだが、「YoastSEO」というオブジェクト(または変数)が未定義(存在しない)ので、処理を「return;」で中断しているのだ。
確かに俺の環境には、「Yoast SEO」というSEO関連を一括管理してくれるプラグインが入っているが、まさかそれが原因なのだろうか? たかだかメディアライブラリを開くくらいの処理でも特定のプラグインにそれほど依存しているのだろうか? 試しにYoast SEOを無効化してみたところ、今度は投稿編集画面すら表示されなくなった。記事を開こうとすると真っ白な画面になるだけだ。
むむ、やはり大して役にも立たないプラグインを入れるべきではないな。「それ」があることを前提として行われる処理があったりして、何かが嚙み合わなくなったとたん、こうやって不具合となって現れるんだから。それに先ほど原因として挙げられた「post-edit.js」というファイルであるが、「wp-content/plugins/wordpress-seo/js/dist/post-edit.js」にあることが判明。
これがソースデータでは「yoast-seo-post-edit-js」というIDで識別されていたことを鑑みるに、やはりYoast SEOが悪さしているんじゃないだろうか? ようは先ほどの「return;」になっているところを修正して、他のJavascriptが読み込まれるようにすればよいのではないか? まぁ、そのやり方が分からないんだけど……。
もう一つの問題個所
メディアライブラリを読み込もうとした際に出てくる方のエラーでは、問題のファイルが「wp-includes/js/dist/vendor/react-dom.min.js」であると言っている。「react-dom.min.js」はWordPress のブロックエディター(Gutenberg)で使用されるファイルらしく、ブロックのレンダリングや編集処理を担当しているようだ。Yoast SEOなどのプラグインもGutenbergに「React」コンポーネントを埋め込むため、このファイルを利用するらしい。
該当箇所は以下の部分だ。
if (Ja)
throw e = eu, ←×
Ja = !1,
eu = null,
e
どうも「eu = null」になっているせいで、「throw e = eu」が「throw null」になってしまうことがエラーの原因らしい。なぜeuにnullが代入されているのかは分からないが、これが不測の事態であるならば、何らかの正しい値およびそれを定義しているファイルが正常に読み込まれていないせいだと思われる。
解決策に関する情報求ム
ワ、ワシにはどうすることもできぬ……。幸い、現時点では「特定の状況下でメディアライブラリが開けない」という程度の不具合で済んでいるので、記事に画像を付けたい場合は一時的に他のテーマにすればいいだけだ。WordPress本体、Cocoon、Yoast SEOどれかの今後のアップデートで解決する可能性もある。ここは下手にいじらずにジッと堪え忍ぶこととしよう。
もし解決策が分かる有識者の方がおられれば、ぜひともコメントなどで教えてくだされば幸いだ。さて、ここいらで俺がいつも思っているボヤキをもって、この記事を締めくくらせていただこう。
いつだって、アップデートは改悪だ。
03/13追記 – Cocoonの更新が来て直りました
最新版Cocoon 2.8.5.1のアップデートが来て、メディアライブラリの問題は解消された。製作者様がこのエラー報告記事を読んでくれた可能性は低いだろうが、その対応の早さには感謝しかない。製作者様、いつも素晴らしいテーマを無料と使わせていただき、本当にありがとうございます<m(__)m>
コメント