我正在尝试将三件事放入 Wordpress 页面中的隐藏表单字段中:
在有人访问我网站上的任何页面之前访问的最后一个“非现场”页面(例如,很可能是 Google 页面)
他们访问我网站的第一页
他们进入表单页面之前我网站上的最后一页
第三个很容易(只需使用),但前两个给我带来了问题。
我正在尝试通过使用会话变量来保存 #1 和 #2,以便在每个页面的标题中,我都有以下代码:
<?php
session_start();
if (! isset($_SESSION['offsite_referer'])) {
$_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'];
}
if (! isset($_SESSION['first_page'])) {
$_SESSION['first_page'] = $_SERVER['REQUEST_URI'];
}
?>
然后再往下,作为测试代码(稍后更改为 input type=hidden 等):
<p>offsite_referer: <?= $_SESSION['offsite_referer'] ?></p>
<p>first_page: <?= $_SESSION['first_page'] ?></p>
(FWIW,我的 wp-config.php 顶部也有 session_start()。是的,我的网站已关闭 register_globals。)
出于某种原因,$_SESSION['offsite_referer']总是作为我的主页结束,即使我通过另一个站点的链接直接点击表单页面 (/free-reports) 也是如此。同样,first_page始终显示为 /
是的,我在尝试之间清除所有 cookie 等,以强制创建新会话。
这段代码曾经在我的 pre-Wordpress 网站上运行良好,所以我只能认为它与 WP 有关,特别是可能是 WP 的重定向(WP 的 mod_rewrite 内容在 .htaccess 中)
我尝试将 $_SESSION['offsite_referer'] = $_SERVER['HTTP_REFERER'] 更改为 wp_get_original_referer() 但它似乎没有效果。
顺便说一句,如果我访问我的表单页面(在 /free-reports/)作为我网站上的第一页(在清除 cookie 等之后)并打印 $_SERVER['HTTP_REFERER'],它会正确显示最后一个异地页面 - 即使$_SESSION['offsite_referer'] 没有。
我很困惑,并且花了相当多的时间试图自己解决这个问题,所以任何解决这个问题的帮助都将不胜感激。