WordPress でニュース系の投稿ページを作成する場合、ページ自体には記事の実体が存在する必要はなく、単に別の URL へ転送したいだけの場合もあることでしょう。URL 転送用プラグインだと Redirection などがありますが、都度記事とは別の設定を行うと、記事自体の削除や元ページの URL 変更への対応が面倒です。 そんな場合のことを考え、カスタムフィールドを定義し、ページ内に URL を記述してページ転送する方法を作って作ってみました。元ネタはこちら。
方法
- template_redirect でフックする
- is_singular() 関数などで転送する対象のページかどうかを判定
- 関数内でカスタムフィールド値を取得し、その値で wp_redirect() 関数を実行
サンプルコード
以下のコードを functions.php に書き加えます。このコード例では URL が正しくない場合無限ループするので注意してください。
// カスタム フィールド("redirect_url")によるURL転送 add_action('template_redirect' ,'wingfield_url_redirection',1); function wingfield_url_redirection(){ if(!is_home()) { if(!is_archive()) { if(!is_category()) { if (is_singular()) { $url = post_custom('link_url'); if($url != "") { wp_redirect($url); } } } } } }
2013-10-10追記
アーカイブページの場合の考慮を追加。orで正常に動作しなかったので条件文を入れ子にしてます。