如何在WordPress中获取跳转至文章前的上一页特定分类名称
解决方案
因为目标文章属于多个地点分类,无法通过get_category()直接获取来源分类,推荐以下几种可行方案:
1. URL传递分类参数(最可靠)
在分类页面的文章跳转链接中,手动拼接来源分类的标识:
- 分类页(如Apple Valley分类)的文章链接修改为:
<a href="<?php echo get_permalink($post->ID); ?>?from_cat=<?php echo get_query_var('category_name'); ?>"> <?php the_title(); ?> </a> - 在文章页中,获取并解析这个参数:
if (isset($_GET['from_cat'])) { $from_cat_slug = sanitize_text_field($_GET['from_cat']); $from_category = get_category_by_slug($from_cat_slug); if ($from_category) { $from_cat_name = $from_category->name; // 输出或使用分类名称 echo "来源分类:{$from_cat_name}"; } }
2. 通过HTTP Referer解析来源(有局限性)
读取上一页的URL,从中提取分类信息:
if (isset($_SERVER['HTTP_REFERER'])) { $referer_url = $_SERVER['HTTP_REFERER']; // 匹配WordPress分类URL结构,如 example.com/category/apple-valley/ preg_match('/\/category\/([^\/]+)\//', $referer_url, $matches); if (!empty($matches[1])) { $from_cat_slug = $matches[1]; $from_category = get_category_by_slug($from_cat_slug); if ($from_category) { $from_cat_name = $from_category->name; echo "来源分类:{$from_cat_name}"; } } }
注意:若用户直接输入文章URL、刷新页面或浏览器不发送Referer,此方法失效。
3. 使用Session存储分类信息
在分类页加载时,将当前分类名称存入Session:
// 在分类模板文件顶部开启Session if (!session_id()) { session_start(); } $current_category = get_queried_object(); if ($current_category instanceof WP_Term && $current_category->taxonomy === 'category') { $_SESSION['last_visited_cat'] = $current_category->name; }
在文章页读取Session中的值:
if (!session_id()) { session_start(); } if (isset($_SESSION['last_visited_cat'])) { $from_cat_name = $_SESSION['last_visited_cat']; echo "来源分类:{$from_cat_name}"; // 可选:读取后清除Session,避免后续页面复用 unset($_SESSION['last_visited_cat']); }
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

