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;
}
}
}