Tips
ページングされたcategory.phpでその記事が載るページに戻る
投稿が多くなると、設定次第ではカテゴリーの一覧ページがページングされて、「/category/page/●」のようなURLになります。記事ページに「一覧へ戻る」などのインターフェースを加えた場合、普通のリンク形式の「category/」では、その記事が載っていたページには戻れず、ページングされたcagegory.phpの1ページ目に戻ってしまいます。
それを回避するために、
- category.php 側で「ページ番号 + カテゴリースラッグ」を渡す
- 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を生成する
を実行しましょう。

コメントを残す