WEB制作者向け無料テーマ「Arkhe」をリリースしました

WordPressで特定のページを404扱いやリダイレクト処理で無効にする方法

WordPressで使用しないページやセキュリティ的に表示させたくないページを無効にする方法です。

ただ、「無効にする」とはいっても404扱いにしてエラーページを表示させるのか、それともアクセスがあれば強制的にトップページなどへリダイレクトさせるのかによって、その方法は異なります。

例えば、著者アーカイブについてはログイン用のユーザー名がばれてしまうので、必要でないなら無効にすべきだとよく言われています。

しかし、ネットに出回っている情報は主に404扱いとする方法で、これだとユーザー名が含まれたURLはそのまま丸見え状態です。

今回は、そんなことにならないように、両者それぞれについてメモしていこうと思います。

404にするのか、リダイレクトさせるのか、適切な方を選択できるようにしておきましょう。

 

目次

404扱いにする場合

特定のページを404扱いにしたい場合は、そのページに対応したフィルターフックに対して'__return_empty_array'というプロパティを投げます。

例えば、冒頭で述べた「著者アーカイブ」を404扱いにしたい場合は、'author_rewrite_rules'というフィルターを使って、以下のように記述します。

「著者アーカイブ」を404扱いにするコード

add_filter( 'author_rewrite_rules', '__return_empty_array' );

上記をfunctions.phpの好きなところへ追記して下さい。

主要ページごとのフィルター名一覧

フィルター名 対象
root_rewrite_rules ルート
post_rewrite_rules 投稿ページ
page_rewrite_rules 固定ページ
date_rewrite_rules 日付アーカイブページ
search_rewrite_rules 検索結果ページ
comments_rewrite_rules コメント
author_rewrite_rules 著者アーカイブページ
{$permastruct}_rewrite_rules 作成した任意のパーマリンク構造(?)

リダイレクトさせて使用不可にする場合

リダイレクト専用のアクションフック、'template_redirect'が用意されているのでこちらを使いましょう。

リダイレクトさせるためのフックを使用するコード

add_action( 'template_redirect', 'my_redirect', 1 );
function my_redirect() {
    /* リダイレクト処理 */
}

このmy_redirect()という関数の中でリダイレクトさせたいページを条件分岐タグで判定し、リダイレクトさせます。

リダイレクトに使うコード

では、どのようにリダイレクトを行うのか。

WordPressでは2種類のリダイレクト用関数を用意してくれていますので、どちらか好きな方を使いましょう。

迷ったらwp_safe_redirect()でいいかと思います。

引数にはリダイレクト先の「絶対URL」を渡すことに注意してください。

また、どちらの関数にも、マニュアルには以下のような記述がありました。

自動的に exit しないので、直後に exit を実行すべきです。

exit;させるのを忘れないようにしましょう。

具体例

ではいくつか具体例を。

著者アーカイブへのアクセスをトップページへリダイレクトさせる

add_action( 'template_redirect', 'my_author_redirect', 1);
function my_author_redirect() {
    if ( is_author() ){
        wp_safe_redirect( home_url() );
        exit;
    }
});

メディア投稿ページへのアクセスをメディア画像URLへリダイレクトさせる

add_action( 'template_redirect', 'my_attachment_redirect', 1);
function my_attachment_redirect() {
    if ( is_attachment() ) {
        wp_safe_redirect( get_post()->guid );
        exit;
    }
});

投稿フォーマットアーカイブへのアクセスをトップページへリダイレクトさせる

add_action( 'template_redirect', 'my_post_format_redirect', 1);
function my_post_format_redirect() {
    if ( is_archive() ) {
        if ( strpos( get_query_var( 'post_type' ), 'post_format' ) !== false ) {
            wp_safe_redirect( home_url() );
            exit;
        }
    }
});

のようになります。

これら複数のリダイレクトを実行したい場合はひとつにまとめておきましょう。

全部まとめると

add_action( 'template_redirect', 'my_redirect', 1);
function my_redirect() {
    /* 著者アーカイブのリダイレクト */
    if ( is_author() ){
        wp_safe_redirect( home_url() );
        exit;
    }
    /* メディア投稿ページのリダイレクト */
    if ( is_attachment() ) {
        wp_safe_redirect( get_post()->guid );
        exit;
    }
    /* 投稿フォーマットアーカイブのリダイレクト */
    if ( is_archive() ) {
        if ( strpos( get_query_var( 'post_type' ), 'post_format' ) !== false ) {
            wp_safe_redirect( home_url() );
            exit;
        }
    }
}

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次