2022.01.25

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のカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。

あなたのサイトに理想の機能を実装!WordPressカスタマイズサービス

本サービスはあなたのWordPressサイトに理想の機能を実装するサービスとなります。 どのような機能・要望でも実現可能です! Wo......

→この記事を読む