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

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

例えば、著者アーカイブは必要でない限りはログイン用のユーザー名がばれてしまうので無効にすべきだとよく言われていますが、ネットに出回っている情報は主に404扱いとする方法です。

しかし、実はこれでは全く意味がなく、肝心のURLはそのまま見れてしまうのでユーザー名が簡単にばれてしまいます。

今回は、そんなことにならないように両者それぞれについてメモしていこうと思います。
404にするのか、リダイレクトさせるのか、適切な方を選択できるようにしておきましょう。

 

目次

404扱いにする場合

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

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

add_filter( 'author_rewrite_rules', '__return_empty_array' );

function.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 を実行すべきです。

具体例

ではいくつか具体例を。

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

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;
        }
    }
});
- Thank you for reading. -

コメント

コメントする