WordPressで不適切ページを404表示にする方法
こんにちは、webエンジニアのゾノ( @ozonosho )です。
今回の記事ではWordPressで不適切ページを404表示にする方法を紹介したいと思います。
具体的な利用場面としては下記のようなケースを想定しています。
不適切ページが発生するケース
例①子ページのスラッグ生成のために親ページを作る場合
WordPressは仕様上、親ページがなければ子ページのスラッグを生成できません。
その都合、下記のような問題が発生します。
-
https://tsukuriba.co.jp/event/info
というURLのページを作りたい場合、
https://tsukuriba.co.jp/event
というページは不要でも生成しなければいけない。
この場合「https://tsukuriba.co.jp/event」というページには中身が無いので、アクセスした際に404を返すのが適切です。
例②特定権限ユーザーにのみ表示するページを作る場合
特定権限ユーザーやログインユーザーのみに表示するページの場合も同様です。
たとえば運営権限を持つユーザーのみに表示するページであれば、それ以外のユーザーがアクセスした際に空のページを表示するのではなく404を返すのが適切です。
例③詳細ページを利用しない「投稿」「固定ページ」がある場合
WordPressの投稿や固定ページはデフォルトで詳細ページを持ちます。
その都合、たとえば簡単なお知らせを投稿として用意して一覧ページで全文表示すれば十分なケースでも、不要な詳細ページが生成されてしまいます。
こういった場合、詳細ページにアクセスした際に404を返すのが適切です。
尚、カスタム投稿タイプで詳細ページが不要な場合は、404を返すのではなくregister_post_typeを利用するときの設定を下記にするほうが望ましいです。
"public" => false,
"publicly_queryable" => false,
この設定にすることで、そもそもの詳細ページ生成を防ぐことができます。
不適切ページを404表示にする方法
functions.phpに下記のようなコードを追加することで実装できます。
//不適切ページを404にする
function set_status_404() {
global $wp_query;
//①スラッグ生成のためだけの固定ページ
if(is_page('不要な固定ページのスラッグ')) {
$wp_query->set_404(); //wp_queryに404フラグをセット
status_header(404); //ページへのアクセス結果を404にする
get_template_part('404'); //404ページ用テンプレートを表示
exit;
}
//②特定権限ユーザー以外には表示しないページ(例:管理者以外にはAuthorページを表示しない)
if(is_author() && !current_user_can('administrator')) {
$wp_query->set_404();
status_header(404);
get_template_part('404');
exit;
}
//③詳細ページを利用しない投稿
if(is_single()) {
$wp_query->set_404();
status_header(404);
get_template_part('404');
exit;
}
}
add_action('wp', 'set_status_404');
おわりに
以上、今回の記事でWordPressで不適切ページを404表示にする方法を紹介させていただきました。
当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。