PHPでリダイレクトする方法とWordPressで記事やページを他のURLへリダイレクトする方法は若干異なります。WordPressでのURLリダイレクトの方法と、これをする場合の注意点について紹介します。
PHPでリダイレクトするには、
// redirect to top page by some reason
function Redirect($url, $permanent = false)
{
if (headers_sent() === false)
{
header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
}
exit();
}
Redirect('https://example.xyz/', 301);
こんな感じでいけます。
参考文献:
How to make a redirect in PHP? – Stack Overflow
ただ、Wordpressだと、
以下のようにやってしまうと、
if ( get_the_ID() == 107 ){
Redirect('https://example.xyz/', 301);
}
これは不可能です。特定の記事をget_the_IDで識別してからPHPリダイレクトはできません。
wordpressの仕様として、header.phpはheaderが読み込まれてから読み込まれます。いわば静的なPHPです。functions.phpは対してheaderが読み込まれる前に動作する、システムやデータベースに介入ができる動的なPHPです。
get_the_IDは静的なPHPでしか使えません。functions.phpの時点ではまだget_the_IDが使えないからです。
そして、Redirect()はheader()を含んでいます。header()関数は動的なPHPでしか使えません。
つまり、get_the_IDとheader()の併用はできません。get_the_IDが先に読み込まれるのならまだできる余地はありましたが、リダイレクトをするheader()が先に行う動作なので、無理です。
こういうことってWordpressいじってるとたまにあります。覚えておくと良いと思います。
話もどして、じゃあどうするか。
header.phpの中で、
HTMLでやるか、
if ( get_the_ID() == 107 ){
echo ' <meta http-equiv="refresh" content="0; URL=https://example.xyz/"> ' ;
}
Javascriptでやります。
if ( get_the_ID() == 107 ){
echo '<script type="text/javascript">
window.location.href = "https://example.xyz/"
</script>' ;
}
# Webページのリダイレクト速度比較 HTML vs JavaScript vs .htaccess
でも言っていますが、Javascriptリダイレクトは早いですがcurlで取れます。
サーバーからしないリダイレクトはあくまで見かけ上のリダイレクトと思っておいたほうがいいでしょう。