WordPressのアーカイブページのURLから「/archives」を取り除く方法。404対策あり。【WordPress】


URLが「https://sakura.monte-verita.biz/archives/3186」みたいになってたので、そこから「/archives」を取り除く方法。

 

具体的には、
「https://sakura.monte-verita.biz/archives/3186」

「https://sakura.monte-verita.biz/3186」
にしたい。

 

プラグイン(WP No Category Base)もあるようだけど、私の環境ではなぜか動作しなかったので、自力で対応。

 

公開リリース前ならば、単純に「設定→パーマリンク設定」で設定するだけでOKなのだけど、私の場合は既に「/archives」付きURLで運用してしまっていたため、今からその設定をすると、以前の「/archives」付きURLでアクセスしてくれた人には404エラーが発生してしまうという事態が・・・。
SEOやらリンクを張っていただいてる他サイトさんの手前、それは避けたかったので、PHPでどうにかした。

 

1.まずは、WordPress管理画面から設定を変更する

設定→パーマリンク設定を開く。
URLにarchivesが入る場合は、大抵はここで設定が「数字ベース」、「カスタム構造」(←デフォルト設定のまま)なのではないかと思う。
今回は「カスタム構造」を選択する。
カスタマイズ用の入力テキストは「/%post_id%」を入力。(archivesは入れない。)
「変更を保存」を押す。

 

 

公開リリース前のサイトならば、設定はここまでで良い。
・・・問題は、既にリリースされている場合。
以前のarchives付きURLでアクセスすると、404エラーになってしまう。
その場合は、次の2を行う。

 

2.以前の「/archives」付きURLでのアクセスに対して、404エラーが表示されないよう、PHPでリダイレクトさせる

WordPressフォルダを置いている同階層のindex.php(あるいはWordPressフォルダの直下のindex.php)の先頭に、これを記述。

<?php
	// URLに「/archives/」が含まれていたら、取り除いてリダイレクト
	$now_addr = (empty($_SERVER["HTTPS"]) ? "http://" : "https://").$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
	if(preg_match("/\/archives\//s",$now_addr)){
		$new_addr = preg_replace('/\/archives\//s', '/', $now_addr);
		// リダイレクト(移動)
		header( "Location: $new_addr" ) ;
		exit;
	}
?>

URLに「/archives」があったら、取り除いてリダイレクトをかける、という処理。
これをPHPですることで、以前のURLでアクセスされても404エラーを起こさずに新しいURLへ誘導することが可能となる。