カスタムフィールドによるページの URL 転送

      2013/10/10

WordPress でニュース系の投稿ページを作成する場合、ページ自体には記事の実体が存在する必要はなく、単に別の URL へ転送したいだけの場合もあると思います。URL 転送用プラグインだと Redirection などがありますが、都度記事とは別の設定を行うと、記事自体の削除や元ページの URL 変更への対応が面倒です。 そんな場合のことを考え、カスタムフィールドを定義し、ページ内に URL を記述してページ転送する方法を作って作ってみました。元ネタはこちら

方法

  1. template_redirect でフックする
  2. is_singular() 関数などで転送する対象のページかどうかを判定
  3. 関数内でカスタムフィールド値を取得し、その値で 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で正常に動作しなかったので条件文を入れ子にしてます。

 - Web, プログラミング