WordPress管理画面でTypeError: undefined is not an objectが発生したらやるべき事
google page insightsやSearch Consoleの指摘でなんとか解決しなきゃとググって、見つけた設定方法でWordPressのテーマへ設定を反映しています。手早く解決できますよね。
これがいけませんでした。ちょっと考えてから適用しておけば防げました。
以下のような設定をfunctions.phpに記載している場合、管理画面、通常表示どちらでも有効になります。
/*wp-emoji-releaseの無効化*/
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
/*link rel='shortlink'の無効化 */
remove_action('wp_head', 'wp_shortlink_wp_head');
/*link oEmbedの無効化 */
remove_action('wp_head','wp_oembed_add_discovery_links');
/*jqueryの無効化 */
wp_deregister_script('jquery');
/*プラグインの無効化*/
function dequeue_plugins_style() {
wp_dequeue_style('wp-block-library');
wp_dequeue_style('colorbox');wp_dequeue_style('colorbox');
wp_dequeue_style('wordpress-popular-posts');
}
add_action( 'wp_enqueue_scripts', 'dequeue_plugins_style', 9999);
管理画面では有効にしたい場合、以下のように変更します。ワードプレス標準関数is_admin()で管理画面かどうかを判断することができます。
if( is_admin() ){ /* 管理画面 */ }
else{ /* 管理画面以外 */
/*wp-emoji-releaseの無効化*/
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
・
・
・
add_action( 'wp_enqueue_scripts', 'dequeue_plugins_style', 9999);
}/* else end */
管理画面では何もしない、それ以外の場合に処理するコード例です。管理画面がおかしい、そういえばコード修正したかもって方の参考になれば幸いです。
解決までの流れ Can't find variable: wp、TypeError: undefined is not an object (evaluating 'wp.i18n.setLocaleData')
本来の「テキストウィジェット」の表示
比較すると以下のようなことがわかりました。
- タイトルのラベル、入力エリア(input type=text")がない
- 「メディアを追加」ボタンが消えている
- ビジュアル、テキストのタブが消えている
- 入力エリア(textarea)がない
- 削除、完了リンクはある
- 「保存しました」ボタンが「Saved」ボタンとして未翻訳の状態である
本来表示されるべき内容が消えてしまっている?あります。通常のコンテンツにアクセスしてウィジェットのエリアは普通に表示されていました。
一体いつから消えていたのか?ウィジェット系の更新頻度は低いです。そのため、どれくらい前から消えていたのか判断できませんでした。
解決方法は?「Wordpress サイドバーウィジェット 不具合」等でググりました。該当しそうな情報が見つかりません。
原因となりそうなキーワードを集めるためにブラウザーのデバッガー(Safari:右クリック→要素の詳細を表示、Chrome:右クリック→検証)を起動したところ、エラーが多数発生していたことがわかりました。
- 15箇所 ReferenceError: Can't find variable: wp
- 1箇所 TypeError: undefined is not an object (evaluating 'window.wp.editor')
- 1箇所 ReferenceError: Can't find variable: tinymce
このエラーを見て、ぴん!っと閃きました?
そういえば、通常サイト側の対応で、jqueryのURLをテーマ(header.php)に直書きしたことを思い出しました。
wordpressでのjquery呼び出しを削除するため、functions.phpに以下を追加しました。
・
・
wp_deregister_script('jquery');
・
・
よく良く考えると上記のような指定では管理画面、通常サイトを含めて全てjQueryが無効になってしまいますね。↓管理画面の場合は対象外!という処置をしました。
if( is_admin() ){ }else {
wp_deregister_script('jquery');
}
修正したらエラーの内容が変わっていました(アップロードして検証ツールのログを確認したところ)。
Can't find variable: wpエラーは解消しました。
15箇所 ReferenceError: Can't find variable: wp1箇所 TypeError: undefined is not an object (evaluating 'window.wp.editor')- 7箇所 TypeError: undefined is not an object (evaluating 'wp.i18n.setLocaleData')
- 1箇所 TypeError: undefined is not an object (evaluating 'wp.mediaWidgets.init')
- 4箇所 TypeError: undefined is not an object (evaluating 'wp.mediaWidgets.modelConstructors')
- 1箇所 TypeError: undefined is not an object (evaluating 'wp.textWidgets.idBases')
- 1箇所 TypeError: undefined is not an object (evaluating 'wp.codeEditor.defaultSettings')
- 1箇所 TypeError: undefined is not an object (evaluating 'wp.customHtmlWidgets.idBases')
- ReferenceError: Can't find variable: tinymce
これらエラーは、jQueryを除去した方法と同じようなremove_action、wp_dequeue_style、wp_deregister_scriptなどを対策で追加した影響で発生しています。
同じようにis_admin()関数で判断することで対処しました。
エラーはなくなり、サイドバーウィジェットのテキストは展開されるようになりました!
まとめ
ワードプレスの管理画面 外観、サイドバーウィジェットの内容を編集できない!っていうところからの解決するまでの流れが分かったかと思います。ちょっとしたfunctions.phpへの修正でこんな影響が出るとは・・・ワードプレスの修正って、簡単だけど難しいって思いましたよ。
WordPress管理画面でTypeError: undefined is not an objectが発生したら、修正したテーマのfunctions.phpを見直すことでエラーをなくすことが分かったかと思います。
functions.phpへの修正はできる限り、影響範囲を抑えるため条件分岐タグis_adminを使った方がいいですね。
is_admin() | ダッシュボードまたは管理画面の表示中かどうか |
これ以外にもたくさんありますが、管理画面かどうかで判断するのが一番確実だと思います。
初めはWordPressのバグかと疑ってフォーラムとか検索しまくりました。でも結局は自分で設定した変更による影響でがっくりきましたよ・・・
この記事の投稿時点のワードプレスのバージョンは「WordPress 5.6.2 」です。
- 初期費用0円(2022年8月4日に撤廃)
- 安定したサイト運営が可能(CPU/メモリ リソース保証 6コア/8GB〜)
- 契約中は独自ドメインつき 独自ドメイン永久無料特典があります
- 最大10日間無料で、サーバーのお試し利用ができます
- ディスクキャッシュも高速 NVMe SSDを採用(300GB〜)
- 大量アクセスでも安心 転送量は無制限
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image