Undefined index: author in が出た。気になるから解消して消した【PHP】

wordpress

wordpressで白い画面になった時、wp-config.phpでWP_DEBUGをtrueにしてエラーを表示することがあります。
その時、wordpressの動作には問題ないエラーが表示されていることがあります。
今日は「Undefined index: author in」が表示されていました。

気になるのでこのエラーを消してやろうと思います。

Undefined index: author in

このエラーは定義されていない変数がある時に出るエラーです。なので、empty()を使用して変数が空かどうか確認することによりエラーは出なくなります。

なぜこのエラーが出たのかいうと、functions.phpをカスタマイズしている部分が原因でした。
wordpressでは投稿者アーカイブからユーザー名が分かってしまうのですね。そうするとauthor値からユーザー名がわかってしまい、判明したログインユーザー名で不正アクセスのセキュリティリスクになるのです。

過去に知り合いの案件でauthor値からログインユーザー名が漏れて、毎日ログイン画面に漏れたユーザー名でログインを試しているlogを見たことがあります。。。

なので、投稿者アーカイブは404「ページが見つかりません」へ遷移するようにfunctions.phpをカスタマイズしていました。

/**
 * 投稿者アーカイブなし
 */
add_filter( 'author_rewrite_rules', '__return_empty_array' );
function disable_author_archive() {
	if( $_GET['author'] || preg_match('#/author/.+#', $_SERVER['REQUEST_URI']) ){
		wp_redirect( home_url( '/404.php' ) );
		exit;
	}
}
add_action('init', 'disable_author_archive');

このコードの

$_GET[‘author’]

が、エラー箇所でした。その行を、

/**
 * 投稿者アーカイブなし
 */
add_filter( 'author_rewrite_rules', '__return_empty_array' );
function disable_author_archive() {
	if( !empty($_GET['author']) || preg_match('#/author/.+#', $_SERVER['REQUEST_URI']) ){
		wp_redirect( home_url( '/404.php' ) );
		exit;
	}
}
add_action('init', 'disable_author_archive');

if( !empty($_GET[‘author’])…

として、変数の中身が空か確認する記述を追加するとエラーが出なくなりました。

▼参考:empy
https://www.php.net/manual/ja/function.empty.php

コメント

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