[wp]投稿ページを全部アーカイブページに301リダイレクトする方法

FAQとか、サイト上の見せ方によっては便利なやつ。

こうする

カスタム投稿「faq」の投稿ページにアクセスしたら全部アーカイブに飛ばす例。

add_action('template_redirect', function(){
    if (is_singular('faq')) {
        wp_safe_redirect( home_url( '/faq/' ), 301);
        exit;
    }
});

functions.phpに記載する。

条件分岐を足すことでタクソノミーとかも対象にできる。

どういうときに有効か

それこそFAQで例えると、カテゴリー分けはしたとしても一問一答ページは不要なケースがある。

そういった場合はやっぱりカスタム投稿で組んでいくのが楽なので、記事タイトルにQ、本文にAを記載することになる。

で、タグ管理でグルーピングできるからカテゴリー毎の一覧を作ったりして、FAQページをリッチにしたりサイト内の1コンテンツとしてどこぞに設置したり、まあそんな活用をするとして。

WordPressで作ってる仕様上、一問一答ごとにそれぞれURLが振られる。これはsingle.phpの有無は関係ない。こちらが不要であっても生成される。ブログ機能を流用してるから当然なんだけど。

そのまま放置するとインデックス登録されちゃって検索結果に出ちゃったりする。
投稿ページを作ってなかったら、表示のおかしいページが表示されてしまう。それ以前に見せる気のないページにアクセスが散るのもよくない。
とても困る。

ということで、301リダイレクトで飛ばしてしまおうという話。
記事別の指定じゃないからfunctions.phpの方で一括指定しちゃえば済むのでとても楽。

301のついでにnoindexを入れたらより強固になる。
こんなかんじ。

add_action('template_redirect', function(){
    if (is_singular('faq')) {
        wp_safe_redirect( home_url( '/faq/' ), 301);
        exit;
    }
});
add_action('wp_head', function(){
    if (is_singular('faq')) {
        echo '<meta name="robots" content="noindex, nofollow" />';
    }
});

入れてるプラグインによってはnoindexを仕込めるものもあるんでね、そっちに頼っても良いんだけどね、一括で設定したほうが散らからなくていいんじゃないですかね。

半端な解説

これによる.htaccessへの追記はないので、php側の処理で完結してるっぽい。

コメント

タイトルとURLをコピーしました