WordPressの投稿画面で以下のようなエラー(警告)が表示される状況が発生した場合の対処法をまとめています。
Warning: Undefined array key “post_type” in /home/your-domain.com/public_html/wp-content/plugins/happy-elementor-addons/classes/theme-builder.php on line 184
エラーの発生原因
エラーの発生原因はプラグイン「Happy Elementor Addons」によるもので、「Warning: Undefined array key “post_type”」は存在しない配列のキーにアクセスしたときに出力される警告です。
根本的な解決はできない
このエラーはプラグイン「Happy Elementor Addons」によるものなので、「Happy Elementor Addons」を無効にすることで解決できます。
ですが、それだと「Happy Elementor Addons」の機能を使うことはできません。
また、仮に「Happy Elementor Addons」のコードを改修して、post_typeが未定義にならないようコードを追加することもできます。
$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : '';
しかし、この場合も、プラグインを更新した場合に追加したコードは上書きされて消えてしまいます。
警告を非表示にする
エラーではなく警告なので非表示にする対応をとります。
wp-config.php に以下を追加します。既にWP_DEBUGの記載があり値がtrueの場合はfalseに変更します。
これはログも含めてエラー表示自体を何もしないという状態です。本番環境であれば以下のようにするのが一般的です。
define('WP_DEBUG', false);より細かく制御したい場合は、エラーを画面に表示せずログファイル「wp-content/debug.log」のみに記録することもできます。
define('WP_DEBUG', true);
define('WP_DEBUG_DISPLAY', false); // 画面にエラーを表示しない
define('WP_DEBUG_LOG', true); // wp-content/debug.log に出力
@ini_set('display_errors', 0);define(‘WP_DEBUG’, false);で表示が消えない場合
wp-config.phpにdefine(‘WP_DEBUG’, false);を記載しているのに、エラーや警告の表示が消えない場合があります。
この場合原因は以下の2つです。
- 記述場所が間違っている。
- WordPress外で PHP の設定が強制されている
記述場所が間違っている
WP_DEBUGのコードはwp-settings.php を require_once よりも前に記述してある必要があります。
例えば以下のように記述します。
// wp-config.php の中盤
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_DISPLAY', false );
// この行よりも前に書くこと
require_once( ABSPATH . 'wp-settings.php' );WordPress外で PHP の設定が強制されている
.htaccess や php.ini に display_errors=On がある場合など、WordPress外で PHP の設定が強制されている可能性があります。
この場合、wp-config.phpに以下を追記します。
@ini_set( 'display_errors', 0 );ini_set('display_errors', 0);のini_set は PHPの設定(php.iniの値)を一時的に変更する関数です。
display_errors は エラーをブラウザに表示するかどうかを制御する設定項目で、値を0(または "Off")にすると、エラーや警告を画面に表示しません。
ini_setの冒頭の@は、PHPのエラーメッセージを無効にする演算子です。
まとめ
警告を非表示にするには、wp-configの適切な位置に以下を追記する。
define('WP_DEBUG', false);それでも警告が消えない場合はphpの設定をいじるコードを追記する。
define('WP_DEBUG', false);
@ini_set( 'display_errors', 0 );
