WordPress电商预发布站添加顶部栏链接至原始来源网站的问题
解决原始来源URL持久化显示的方案
核心思路
只在用户首次进入网站时捕获外部来源URL并保存到PHP会话,后续站内跳转时直接读取会话中的值,避免被站内referrer覆盖。
代码实现步骤
1. 会话初始化与原始来源捕获
在网站入口文件(比如functions.php或全局加载的PHP文件)中添加以下代码:
// 必须在输出任何HTML前启动会话 if (!session_id()) { session_start(); } // 仅当会话中无原始来源时才捕获(避免站内跳转覆盖) function capture_original_referrer() { if (!isset($_SESSION['original_referrer']) && isset($_SERVER['HTTP_REFERER'])) { $referrer_url = $_SERVER['HTTP_REFERER']; $referrer_host = parse_url($referrer_url, PHP_URL_HOST); // 定义允许的外部来源域名(可按需添加多个) $allowed_external_hosts = ['xyz.com']; // 验证来源是目标外部域名,才保存到会话 if (in_array($referrer_host, $allowed_external_hosts)) { $_SESSION['original_referrer'] = $referrer_url; } } } // WordPress环境下用wp_loaded钩子触发,非WP环境可在页面加载初期直接调用函数 add_action('wp_loaded', 'capture_original_referrer');
2. 在所有页面显示返回顶部栏
创建输出顶部栏的函数,在全局模板(比如header.php)中调用:
function render_back_to_original_referrer_bar() { if (isset($_SESSION['original_referrer'])) { $original_url = $_SESSION['original_referrer']; $original_host = parse_url($original_url, PHP_URL_HOST); echo '<div style="background: #f5f5f5; padding: 10px; text-align: center;">'; echo '<a href="' . esc_url($original_url) . '" style="color: #2d72d9;">返回 ' . $original_host . '</a>'; echo '</div>'; } } // WordPress环境用wp_head钩子输出,非WP环境可直接在header模板中调用render_back_to_original_referrer_bar(); add_action('wp_head', 'render_back_to_original_referrer_bar');
关键说明
- 会话启动时机:必须在任何HTML输出前调用
session_start(),否则会触发PHP报错 - 来源验证:通过
allowed_external_hosts过滤,避免将站内页面误存为原始来源 - 安全处理:用
esc_url()转义URL,防范XSS攻击 - 持久化可选:会话在浏览器关闭后失效,若需更长时间保存,可改用Cookie并设置合理过期时间
内容的提问来源于stack exchange,提问作者Debashish Bairagi
相关产品推荐
相关产品推荐

