WordPress は URL の一部が間違えていたり足りない曖昧な URL でも補完して正規の URL へリダイレクトする機能(URL 自動補完リダイレクト機能)があります。この機能により投稿ページ(シングルページ)では URL 内のカテゴリー名が実際には存在しないカテゴリーでも正規の URL にリダイレクトされます。ただしカテゴリーアーカイブページでは機能しません。URL のカテゴリー部分は何であれ、リダイレクトされることもなく、404 エラーになることもなく、URL の末尾のカテゴリーのアーカイブページが表示されます。そこでカテゴリーアーカイブページにおいても自動補完リダイレクトさせる方法を紹介します。
カテゴリーアーカイブページの URL 自動補完リダイレクト
カテゴリーアーカイブページにおいても URL 自動補完リダイレクトのようにカテゴリーを補完して正規の URL へリダイレクトするようにします。
テーマの functions.php などに、
add_action( 'template_redirect', function() {
global $wp_rewrite, $wp, $cat;
if ( is_category() && $wp_rewrite->permalink_structure ) {
$requested_url = home_url( $wp->request );
$redirect_url = get_category_link( $cat );
if ( $requested_url !== untrailingslashit( $redirect_url ) ) {
wp_safe_redirect( $redirect_url );
exit();
}
}
} );
カテゴリーアーカイブページの曖昧 URL を無効化
カテゴリーアーカイブページのカテゴリーが曖昧な URL を無効(404 エラー)にします。
テーマの functions.php などに、
add_action( 'template_redirect', function() {
global $wp_rewrite, $wp_query;
if ( is_category() && $wp_rewrite->permalink_structure ) {
$category_name = $wp_query->query_vars['category_name'];
$category_path = $wp_query->query['category_name'];
if ( $category_name !== $category_path ) {
$category = get_category_by_path( $category_path );
if ( ! $category || is_wp_error( $category ) ) {
$wp_query->set_404();
status_header( 404 );
nocache_headers();
}
}
}
} );
参考ページ: