ワードプレスで「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()関数を付け足して回避しましょう。