広告

posted by fanblog

WordPress 管理画面 [Error] TypeError: undefined is not an object (evaluating 'wp.i18n.setLocaleData')の解決方法

WordPressの管理画面でウィジェットの内容を変更するために外観→ウィジェットで表示されるサイドバーウィジェットのテキスト、カスタムHTMLを展開しようとするとこんな感じでタイトルや内容の記載が表示できない状態になっていました。解決方法はこちらです。
wordpress-widget-sidebar-not-working-1.jpg


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')


本来の「テキストウィジェット」の表示
wordpress-widget-sidebar-not-working-goal.jpg

比較すると以下のようなことがわかりました。
  1. タイトルのラベル、入力エリア(input type=text")がない
  2. 「メディアを追加」ボタンが消えている
  3. ビジュアル、テキストのタブが消えている
  4. 入力エリア(textarea)がない
  5. 削除、完了リンクはある
  6. 「保存しました」ボタンが「Saved」ボタンとして未翻訳の状態である


本来表示されるべき内容が消えてしまっている?あります。通常のコンテンツにアクセスしてウィジェットのエリアは普通に表示されていました。

一体いつから消えていたのか?ウィジェット系の更新頻度は低いです。そのため、どれくらい前から消えていたのか判断できませんでした。

解決方法は?「Wordpress サイドバーウィジェット 不具合」等でググりました。該当しそうな情報が見つかりません。

原因となりそうなキーワードを集めるためにブラウザーのデバッガー(Safari:右クリック→要素の詳細を表示、Chrome:右クリック→検証)を起動したところ、エラーが多数発生していたことがわかりました。
wordpress-widget-sidebar-not-working-2.jpg

  1. 15箇所 ReferenceError: Can't find variable: wp
  2. 1箇所 TypeError: undefined is not an object (evaluating 'window.wp.editor')
  3. 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');
}

修正したらエラーの内容が変わっていました(アップロードして検証ツールのログを確認したところ)。
wordpress-widget-sidebar-not-working-3.jpg

Can't find variable: wpエラーは解消しました。
  1. 15箇所 ReferenceError: Can't find variable: wp
  2. 1箇所 TypeError: undefined is not an object (evaluating 'window.wp.editor')
  3. 7箇所 TypeError: undefined is not an object (evaluating 'wp.i18n.setLocaleData')
  4. 1箇所 TypeError: undefined is not an object (evaluating 'wp.mediaWidgets.init')
  5. 4箇所 TypeError: undefined is not an object (evaluating 'wp.mediaWidgets.modelConstructors')
  6. 1箇所 TypeError: undefined is not an object (evaluating 'wp.textWidgets.idBases')
  7. 1箇所 TypeError: undefined is not an object (evaluating 'wp.codeEditor.defaultSettings')
  8. 1箇所 TypeError: undefined is not an object (evaluating 'wp.customHtmlWidgets.idBases')
  9. 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 」です。

 

↓↓レンタルサーバーのオススメはコレ!↓↓

 

 

この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
http://fanblogs.jp/tb/10570196
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
最新記事
最新コメント
タグクラウド
カテゴリアーカイブ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。