PHPでリダイレクトする方法とWordPressでやる場合の注意点

    >


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://english-time.xyz/', 301);

こんな感じでいけます。

参考文献:
How to make a redirect in PHP? – Stack Overflow

ただ、Wordpressだと、
以下のようにやってしまうと、

if ( get_the_ID() == 107 ){

    Redirect('https://english-time.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://english-time.xyz/">  ' ;

}

Javascriptでやります。

if ( get_the_ID() == 107 ){
    echo '<script type="text/javascript">
    window.location.href = "https://english-time.xyz/"
</script>' ; 
}

# Webページのリダイレクト速度比較 HTML vs JavaScript vs .htaccessでも言っていますが、Javascriptリダイレクトは早いですがcurlで取れます。
サーバーからしないリダイレクトはあくまで見かけ上のリダイレクトと思っておいたほうがいいでしょう。





お困りですか?この記事で紹介していることをマンツーマンで指導、解説、代行します。まずはお気軽にお問い合わせください。


Close Menu