• HOME
  • Diary
  • 特定ページにアクセスした場合に404を返す。

特定ページにアクセスした場合に404を返す。

個人的なメモ書き用のカスタム投稿を作っているが今まではloopで制御して見せないようにしていたが
ログインしていない場合は見せないだけでなく404を返すようにfunction.phpで対応してみた。

function page_not_found_404() {
	$post_type = "post_type"
	if( is_post_type_archive($post_type) || $post_type == get_post_type() ) {
		if(!is_user_logged_in()){
			status_header(404);
			include(TEMPLATEPATH . '/404.php');
			exit();
		}
		return;
	}

}
add_action('template_redirect', 'page_not_found_404');

ローカルサーバだとうまくいっているので本番環境で帰ってきたら実行してみよう。
当たり前だけどインクルードを使っているのでテーマフォルダの中に404.phpがないと機能しないからね。

追記
と一旦実装してみて、吐き出されたソースを細かく見ていくと
titleタグの中身やbody_class()の中身が元のコンテンツの情報のままになっている。
その辺りをちゃんと変更できるようになっておかないと微妙だなぁ。
404.phpのテンプレートにheaderやらなんやらを全て記述していくならできるけども・・。
他の箇所のフィルターを設定すれば問題ないのだけども、一発でできたほうだいいからなぁ。
あとはhtaccessなんかの設定とか挙動を考えておかないと
トップページにリダイレクトされたり404のページが表示されたりと挙動があやふやになっちゃうかもね。