【WordPress】リファラで一覧ページへのリンク先を変える
WordPressサイトで、記事系コンテンツの詳細ページから一覧ページへ戻るボタンのリンク先は、直前のページ送りやカテゴリー選択が維持されたページにしたり、フロントページや外部サイトからのアクセスの場合には一覧のトップへ戻るというように、リンク先を変える実装をしたい時があります。
今回は下図のようなケースで考えてみました。
この場合の戻るボタンのソースコードが以下になります。
<?php
//リファラを取得
$referer = wp_get_referer();
//リファラのURLから記事IDを取得
$referer_post_id = url_to_postid($referer);
//条件によって、戻り先のリンクを変更する
if($referer && $referer != home_url('/') && !$referer_post_id) {
//特定のアーカイブページから来た場合
echo '<p><a href="'. $referer .'">一覧へ戻る</a></p>';
} else {
//それ以外の場合
echo '<p><a href="'. home_url('/blog/') .'">一覧へ戻る</a></p>';
}
?>
3行目のwp_get_referer()でリファラを取得しています。
戻り値は、サイト内からのアクセスの場合は遷移元のURLになり、サイト外からのアクセスの場合はfalseになります。
6行目のurl_to_postid($referer)では、リファラーの戻り値のURLが記事ページの場合は記事IDが、それ以外でIDが取得できない場合は0が返ってきます。
9行目のif文では、取得した値を使った条件分岐でリンクの出力を変更しています。
参照元と同じアーカイブページに戻す条件は「参照元がサイト内」「参照元がフロントページではない」「参照元が記事ページではない」の3つが当てはまる時になり、その場合はアンカータグのリンク先にはリファラーのURLをそのまま利用しています。
それ以外の条件の場合は固定のアーカイブページに戻すので、特定のページをリンク先にしています。
図のケースと導線設計が違うと条件分岐のルールも変わってきますが、その場合は$referer_post_idの値を利用して、任意の記事IDを除外したりすると、汎用性があると思います。