WordPress で特定のページを 404 にする方法 ~ pre_get_posts を使う

ワードプレス ロゴ

WordPress でサイト作っていると、不要なページが出てくる。たとえば企業サイトなどを作る場合、投稿者アーカイブとかは要らない。あっても良い場合でもわざわざ投稿者アーカイブのために色々作業するのが面倒な場合、もう無しにしてしまおうということもあると思います。

つーことで、投稿者アーカイブのページなどを無効にして、もしアクセスした場合は 404 エラーページが表示されるようにする。それには、いくつか方法はあると思いますが、私は pre_get_posts で処理しています。

例えば投稿者アーカイブを無効にするには functions.php に

function custom_pre_get_posts( $query ) {
    if ( is_admin() )
        return;

    if ( $query->is_author() && $query->is_main_query() ) {
        $query->set_404();
        status_header( 404 );
        return;
    }
}

add_action( 'pre_get_posts', 'custom_pre_get_posts' );

というコードを追加する。こうすると、投稿者アーカイブページにアクセスしても 404 エラーページが表示される。

上記コードのポイントは status_header( 404 )。$query->set_404() だけだと、404エラー用のテンプレート 404.php は呼び出されるけど、HTTPステータスコードが 200 のまま。status_header( 404 ) とすることでステータスコードが 404 になる。

ちなみに pre_get_posts で色々細かく指定する場合は、functions.php とはファイルを別にして、functions.php に

require_once( 'library/pre_get_posts.php' );

とすることが私は多いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です