目次
はじめに
WordPressでテーマやウィジェットのカスタマイズをしていると、
ある日突然、画面上部に次のような警告メッセージが表示されることがあります。
Undefined index: WP_Widget_Recent_Comments in ...
私自身、データベースまわりの操作を行っている途中でこのメッセージが出るようになり、
「ずっと表示されていて目障りだな…」と感じたため、表示されないようにする方法を調べました。
原因:存在しないキーを直接参照している
エラーの原因は、WordPress内部で使用されている以下のコードにあります。
//最近のコメント用インラインスタイルタグを削除
function remove_recent_comments_style() {
global $wp_widget_factory;
remove_action('wp_head', array($wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style'));
}
add_action('widgets_init', 'remove_recent_comments_style');
このコードは、「最近のコメント」ウィジェットが自動的に挿入するスタイルタグを削除するためのものです。
しかし、WP_Widget_Recent_Comments
というウィジェットが存在しない状態でこの処理を行うと、
未定義のキーを参照したためにエラーが出るというわけです。
解決方法:isset()で存在確認をしてから処理を行う
この問題を解決するには、isset()
関数を使って、対象のキーが存在しているかを事前に確認するようにします。
修正後のコードはこちら
function remove_recent_comments_style() {
global $wp_widget_factory;
if (isset($wp_widget_factory->widgets['WP_Widget_Recent_Comments'])) {
remove_action('wp_head', array($wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style'));
}
}
add_action('widgets_init', 'remove_recent_comments_style');
修正内容のポイント
isset()
関数を使用することで、配列のキーが存在するかどうかを確認できます- 存在していない場合には
remove_action()
を実行しないため、エラーが回避されます - 結果として、“Undefined index”の警告メッセージが非表示になります
応用のヒント
- 他にも同様の「Undefined index」エラーが出ている場合は、すべてのキー参照に
isset()
を適用する癖をつけるとよいでしょう - 開発中のみ表示される「注意レベル」のエラーであるため、表示を抑止するには
wp-config.php
でWP_DEBUG
をfalse
にする手もありますが、根本的な対処にはなりません
まとめ
WordPressで表示される「Undefined index: WP_Widget_Recent_Comments」というエラーは、
存在しないウィジェットのキーを無条件に参照していることが原因です。
isset()
関数を使ってキーの存在確認を行えば、安全に処理を実行でき、不要なエラーも回避できます。
同様のエラーが出ている場合は、まずissetで囲っているかを確認してみるとよいでしょう。
少しでも参考になれば幸いです。