WordPress アーカイブページの URL 自動補完リダイレクト

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();
			}
		}
	}
} );

参考ページ:

カテゴリーアーカイブのリンク | WordPress.org 日本語

コメントを残す

メールアドレスが公開されることはありません。

日本語でコメントを入力してください。(スパム対策)