ブログの一部カテゴリーを「別ドメインに分けたい」とか「サブドメインに分けたい」とか思うことがありますよね。
私はありました。
ということで「プラグインを使わず特定の記事だけ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
他の方法
別の方法も参考まで
一番簡単。でも面倒。1記事ずつリダイレクト先を手動で設定する力技。
>>>WordPressプラグイン「Redirection」
もしかしたらタグ限定やカテゴリ限定でリダイレクトできるプラグインがあるかもしれない。
今回は探して見つからなかったのでFunctions.phpでリダイレクトするようにしてみた。
apacheなら.htaccess。nginxならnginx.confを使ってリダイレクト設定。
一記事ごとならプラグイン同様力技で設定すればOK。
パーマリンクを「/%category%/%postname%」にしているならカテゴリごとのリダイレクトなら一括設定できるかな。
当サイトは「/%postname%」なのでこの方法は面倒だったので不採用。