WEB STUDIES

もっともっと、もっと先へ。株式会社アットワークMore and more,
further and further.

Tips

2025年4月2日

ページングされたcategory.phpでその記事が載るページに戻る

投稿が多くなると、設定次第ではカテゴリーの一覧ページがページングされて、「/category/page/●」のようなURLになります。記事ページに「一覧へ戻る」などのインターフェースを加えた場合、普通のリンク形式の「category/」では、その記事が載っていたページには戻れず、ページングされたcagegory.phpの1ページ目に戻ってしまいます。

それを回避するために、
  1. category.php 側で「ページ番号 + カテゴリースラッグ」を渡す
  2. single.php 側で受け取って戻りURLを生成する

を記述して、本来のページに戻れるようにします。

category.php(カテゴリー一覧ページ)で現在のページ番号を取得する

<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$current_category = get_queried_object();
$cat_slug = $current_category->slug;
?>

くわえて、記事へのリンクをクエリ付きURLへ変更する

<a href="<?php the_permalink(); ?>?from_cat=<?php echo $cat_slug; ?>&from_page=<?php echo $paged; ?>">

single.php(記事ページ)でGETパラメータを受けとる

<?php
$from_page = isset($_GET['from_page']) ? intval($_GET['from_page']) : 1;
$from_cat  = isset($_GET['from_cat']) ? sanitize_text_field($_GET['from_cat']) : '';
?>
<?php
if ($from_cat) {
	$cat = get_category_by_slug($from_cat);
	if ($cat) {
		$url = get_category_link($cat->term_id);
		if ($from_page > 1) {
			$url .= 'page/' . $from_page . '/';
		}
	} else {
		$url = home_url('/');
	}
} else {
	// パラメータが無い場合のフォールバック
	$cats = get_the_category();
	$url = get_category_link($cats[0]->term_id);
}
?>
一覧へ戻るボタン
<a href="<?php echo esc_url($url); ?>" class="common_btn">一覧に戻る</a>

これで確実に元の一覧ページへ戻れます。簡易にjavascriptで前のページに戻る「history.back();」で戻ることも可能ですが、直接記事ページを閲覧した場合など、正確に戻れませんので面倒でも、

category.php 側で「ページ番号 + カテゴリースラッグ」を渡す
single.php 側で受け取って戻りURLを生成する

を実行しましょう。

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です


    一覧に戻る