【WordPress】エラー対処法|Warning: Undefined array key 8 in /home/public_html/wp-content/themes/functions.php on line 94

wordpress-prograshi(プロぐらし)-kv WordPress
記事内に広告が含まれていることがあります。

レンタルサーバーを移管したときに、次のようなエラーが発生しました。

Warning: Undefined array key 8 in /home/public_html/wp-content/themes/functions.php on line 94

この記事ではこの原因と対処法についてまとめています。

エラーの内容

エラーメッセージ

Warning: Undefined array key 8 in /home/xxx/prograshi.com/public_html/wp-content/themes/cocoon-my-child/functions.php on line 94

Warning: Undefined array key 9 in /home/xxx/prograshi.com/public_html/wp-content/themes/cocoon-my-child/functions.php on line 94

Warning: Undefined array key 10 in /home/xxx/prograshi.com/public_html/wp-content/themes/cocoon-my-child/functions.php on line 94


このエラーの内容は次のようなものです。

「警告: /home/xxx/prograshi.com/public_html/wp-content/theme/cocoon-my-child/functions.php の 94 行目にある配列キー 8が未定義」


エラーが発生しうる3つの原因

このエラーは、functions.phpファイルの94行目で、配列に存在しないキー(8, 9, 10)にアクセスしようとしたために発生したものです。

レンタルサーバーを移管した際に、PHPの設定やバージョンの違い、または配列のデータが正しく読み込まれなかったことが原因で、このようなエラーが表示されることがあります。


原因1: PHPバージョンの違い

移管前のサーバーと移管後のサーバーで使用しているPHPのバージョンが異なる場合、PHPの動作が微妙に異なることがあります。特に、未定義の配列キーにアクセスする際の警告メッセージが異なることがあります。


原因2: データの移行ミス

データベースやファイルの移行が不完全で、一部のデータが正しく移行されていない可能性があります。

これにより、配列に期待するデータが存在しないことがあります。

FTPソフトなどでファイルやフォルダを移管した際に、途中で停止してしまった場合などに発生する可能性があります。


原因3: コードの問題

functions.phpファイルで、配列のキーが存在するかを確認せずにアクセスしている可能性があります。これが原因で、存在しないキーにアクセスした場合にこのエラーが発生します。


PHPバージョンの確認

サーバー移管でこのエラーが発生した場合、一番の可能性はPHPバージョンの違いです。

まずは旧サーバーに入ってPHPの状態を確認します。「8.3」になってます。



次に、移管後のサーバーに入ってPHPのバージョンを確認します。バージョンが「8.1.22」になっていました。


「8.3」と「8.1」でマイナーバージョンがずれています。


対策1: PHPバージョンの違い

修正として、移管後のサーバーのPHPのバージョンを旧サーバーと同じ「8.3系」に変更します。


変更しましたが、直りませんでした。。


対策2: データの移行ミス

エラー発生原因にデータの移行ミスがあります。

移行ミスしていないかを確かめるため、旧サーバーの現在使用中のテーマの中にあるfunctions.phpと、新サーバーの現在使用中のテーマの中にあるfunctions.phpを確認してみます。

確認したところ、全く同じものがコピーされていました


対策3: コードの問題

エラーの原因になっているfunctions.phpの該当部分のコードは以下のようになっています。

これは、h2タグの上に指定した広告を表示するためのプログラムです。

// 表示表示設定
$show_ads = [  //ウィジェット投稿本文中
	[true,  $adsence], 
	[true,  $adsence],
	[true,  $adsence],
	[true,  $adsence],
	[true,  $adsence], 
	[true,  $adsence], 
	[true,  $adsence], 
	[true,  $adsence],
	[true,  $adsence], 
	[true,  $adsence], 
];
	
	
  if ( is_single() ) {
    $h2 = '/^<h2.*?>.+?<\/h2>$/im';
    if ( preg_match_all( $h2, $the_content, $h2s )) {
      if ( $h2s[0] ) {
		for ($i=0; $i <= 10; $i++){
			if ( $h2s[0][$i] && $show_ads[$i][0] ) {
			  $the_content  = str_replace($h2s[0][$i], $show_ads[$i][1].$h2s[0][$i], $the_content);
			}
		}
      }
    }
  }
  return $the_content;
}
add_filter('the_content','show_ads_on_selected_h2');


今回はこのコードがエラーの原因になっているようなので以下のように修正します。

エラー発生個所でキーのない変数を処理していることが問題なので、issetメソッドを用いて、存在している場合のみ処理を実行するように変更しました。

		for ($i=0; $i <= 10; $i++){
            if ( isset($h2s[0][$i]) && $show_ads[$i][0] ) {
                $the_content  = str_replace($h2s[0][$i], $show_ads[$i][1].$h2s[0][$i], $the_content);
		    }
        }


WEBサイトを確認するとエラー表示が消えました。

以上で対応は完了です。

タイトルとURLをコピーしました