はじめに

WordPressでは、記事を投稿したユーザーごとに投稿者アーカイブページが自動で作成されます。
「プロフィール」ウィジェットや、Cocoon設定→本文 →投稿関連情報「投稿者名を表示する」をオンにすると、投稿者名からそのプロフィールページへリンクされます。
図1に示すように、設定→プロフィール→プロフィールページURLが未入力、またはURLに/?author=1のような形式を使用している場合、投稿者アーカイブページが表示されます。
このURLにはユーザー名が含まれるため、ユーザーIDの漏洩リスクがあります。
https://example.com/author/ユーザー名/
対策として、プラグイン「Edit Author slug」を使用することが多いかと思います。
しかし、プラグインを使わずに、プロフィールページURLが未入力の場合、プロフィールページのリンクを無効化する方法もあります。
この記事では、その方法について説明します。
実装手順
以下のコードをfunctions.phpに追加します。
// 投稿者名のプロフィールリンクを無効
add_filter('the_author_box_name', function ($name, $id) {
$url = get_the_author_profile_page_url($id);
if (!$url) {
$name = strip_tags($name);
}
return $name;
}, 10, 2);
// 投稿者アーカイブページを無効化
add_action('template_redirect', function () {
// 投稿者アーカイブURLまたは「?author=数値」形式のアクセスを判定
if (is_author() || (isset($_GET['author']) && is_numeric($_GET['author']))) {
// トップページへ301リダイレクト
wp_safe_redirect(home_url(), 301);
exit;
}
});
さいごに
今回紹介した方法を使えば、プラグインなしで「プロフィール」ウィジェットの投稿者リンクを無効化し、投稿者アーカイブページへのアクセスも制限できます。
セキュリティ対策の一環として、ユーザー名の漏洩を防ぎたい場合にぜひ活用してください。


