<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否

/*** ユーザーIDによるアクセス（/?author=ID）のみを404にしユーザー名ベースのアーカイブ（/author/ユーザー名/）は維持する ***/
function haup_author_archive_id_parameter_access_to_404( $query ) {
	// 管理画面外（フロントエンド）かつメインクエリの場合のみ処理
	if ( ! is_admin() && $query->is_main_query() ) {
        
		// クエリ変数 'author' に値がセットされているかチェック
		// これは /?author=ID の形式のアクセスを捉えます
		if ( ! empty( $_GET['author'] ) ) {
			$author_id = absint( $_GET['author'] );
            
			if ( $author_id > 0 ) {
				// 1. クエリを「存在しないクエリ」として強制的に設定
				$query->set_404();
                
				// 2. /author/username/ へのリダイレクト処理（Canonical Redirection）を停止
				// IDからユーザー名へのリダイレクトを防ぐための最重要措置
				remove_action( 'template_redirect', 'redirect_canonical' );
                
					// 3. 404ヘッダーを設定し、テーマの404テンプレートをロードさせる
					status_header( 404 );
			}
		}
        
	}
}
add_action( 'pre_get_posts', 'haup_author_archive_id_parameter_access_to_404' );