【WordPress】特定の記事だけ301リダイレクトするfunctions.php

ブログの一部カテゴリーを「別ドメインに分けたい」とか「サブドメインに分けたい」とか思うことがありますよね。

私はありました。

ということで「プラグインを使わず特定の記事だけ301リダイレクト」を行います。

いろいろやり方はあるとおもいますが、今回は「特定のタグがついた記事だけリダイレクト」するようにしました。

なお記事の移行はAll-in-One WP Migrationで丸ごとコピー&不要記事削除で行っています。

>>>【公式】All-in-One WP Migration

Functions.phpに追記

function my_redirect(){
 if (is_single()) {
   $tags_array = get_the_tags($post->ID);
   if ($tags_array[0]->name=='redirect'){
    $oldURL = get_permalink($post->ID);
    $newURL = str_replace( '検索文字列',  '置換文字列', $oldURL );
    wp_redirect( $newURL , 301);
     exit;
    }
  }
}

add_action( 'get_header', 'my_redirect' );

get_headerのアクションフィルタを使ってmy_redirecというユーザー定義関数を実行します。

my_redirec関数では「redirect」というタグがついていれば指定したURLに301リダイレクトします。

今回の場合は下記の部分でリダイレクト先のURLを指定しています。

str_replace( '検索文字列',  '置換文字列', $oldURL );

元記事が
「https://lonely-surfer.com/301redirect-using-tag」だったとして
「https://lonely-logs.com/301redirect-using-tag」にリダイレクトしたい場合は下記のように設定します。

str_replace( 'https://lonely-surfer.com/',  'https://lonely-logs.com/', $oldURL );

>>>【参考】PHP str_replace関数

もっと複雑なリダイレクトを行いたいなら「preg_replace」などを使ってもよいでしょう。
>>>【参考】PHP preg_replace関数

タグではなく特定のカテゴリーを指定したいなら「get_the_category」WordPress関数を使ってください。
>>>【参考】テンプレートタグ/get the category

他の方法

別の方法も参考まで

WordPressプラグイン「Redirection」

一番簡単。でも面倒。1記事ずつリダイレクト先を手動で設定する力技。

>>>WordPressプラグイン「Redirection」

もしかしたらタグ限定やカテゴリ限定でリダイレクトできるプラグインがあるかもしれない。

今回は探して見つからなかったのでFunctions.phpでリダイレクトするようにしてみた。

Webサーバ設定ファイル

apacheなら.htaccess。nginxならnginx.confを使ってリダイレクト設定。

一記事ごとならプラグイン同様力技で設定すればOK。

パーマリンクを「/%category%/%postname%」にしているならカテゴリごとのリダイレクトなら一括設定できるかな。

当サイトは「/%postname%」なのでこの方法は面倒だったので不採用。

コメントを残す

メールアドレスが公開されることはありません。