PHPバージョンを8.0以降に変えたら「Undefined array key」エラーが出た場合の対処

ワードプレス
記事内に広告が含まれています。

ワードプレスで「Undefined array key」エラーが発生

サーバーのPHPバージョンを8.0に切り替えたら、ワードプレスのサイトがエラーで真っ白になってしまいました。

エラーの内容はどんな感じ?

Warning: Undefined array key "author" in /home/example.com/public_html/wp-content/themes/example/functions.php on line 30

こんな感じです。ユーザーIDを見られない様に、functions.phpでauthorページをリダイレクトしていたコードが引っかかった様です。

大丈夫、簡単に対処ができるよ。

if($_GET[‘hoge’]) を調整する

ワードプレスでは/?author=1をURL末尾に付けると、author名(ユーザー名)が表示されてしまいます。author名を読み取れない様にする方法はいくつかありますが、authorページを使用しない場合は無効化するのが手っ取り早いです。

// authorページリダイレクト
add_filter('author_rewrite_rules', '__return_empty_array');
function author_archive_redirect()
{
  if ($_GET['author'] || preg_match('#/author/.+#', $_SERVER['REQUEST_URI'])) {
    wp_redirect(home_url('/404'));
    exit;
  }
}
add_action('init', 'author_archive_redirect');

この様なコードをfunctions.phpに記述するとauthorページにアクセスがあった場合、404ページにリダイレクトします。しかしPHP8.0以降では5行目のif($_GET[‘author’]の記述のままではエラーが発生します。

// authorページリダイレクト
add_filter('author_rewrite_rules', '__return_empty_array');
function disable_author_archive()
{
  if (isset($_GET['author']) || preg_match('#/author/.+#', $_SERVER['REQUEST_URI'])) {
    wp_redirect(home_url('/404'));
    exit;
  }
}
add_action('init', 'disable_author_archive');

この場合5行目の記述をif(isset($_GET[‘author’])に書き換えるとエラーが回避できます。

6行目の/404/にするとトップページにリダイレクトするよ。

まとめ

if(isset($_GET['hoge'])){
    処理
}

if(isset($_POST['fuga'])){
    処理
}

PHPのバージョンを8.0以降に変更した際に、「Undefined array key」のエラーが出た場合は、上記の様にif($_GET[‘hoge’])if($_POST[‘fuga’])isset()関数を付け足して回避しましょう。