- Published on
WordPressで他の記事やURLへリダイレクトする方法
- Authors
- Name
- Shou Arisaka nyapp.buzz/shou
- short bio
- Z世代の情報技術者。Next.jsで自作SNSを個人開発中。
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>' ;
}
Javascriptリダイレクトは早いですがcurlで取れます。 サーバーからしないリダイレクトはあくまで見かけ上のリダイレクトと思っておいたほうがいいでしょう。
15歳でWordPressサイトを立ち上げ、ウェブ領域に足を踏み入れる。翌年にはRuby on Railsを用いたマイクロサービス開発に着手し、現在はデジタル庁を支えたNext.jsによるHP作成やSaaS開発のプロジェクトに携わりながら、React.js・Node.js・TypeScriptによるモダンなウェブアプリの個人開発を趣味でも行う。
フロントエンドからバックエンドまで一貫したアジャイルなフルスタック開発を得意とし、ウェブマーケティングや広告デザインも必要に応じて担当、広告運用・SEO対策・データ分析まで行う低コストかつ高品質な顧客体験の提供が好評。
国内外から200万人を超える人々に支えられ、9周年を迎えるITブログ「yuipro」の開発者、デザイナーでありライター。現在ベータ段階の自作SNS「nyapp.buzz」を日本一の国産SNSとするべく奮闘中。