
本文介绍如何在满足特定条件(例如 URL 中包含 “partner” 关键词)时,获取并使用原始 URL 来源 (Referer)。我们将通过 PHP 代码示例,展示如何使用 session 和 WordPress 的 wpcf7_form_tag 过滤器来实现这一功能,从而在 Contact Form 7 表单中动态填充 Referer 信息,为数据追踪和客户来源分析提供支持。
在网站开发中,追踪用户来源对于市场营销和数据分析至关重要。 有时,我们希望仅在用户通过特定渠道(例如包含 “partner” 关键词的推广链接)访问时,才记录其来源信息。本文将详细介绍如何使用 PHP 和 WordPress 的 Contact Form 7 插件,实现有条件地获取和使用原始 URL 来源(Referer)的功能。
核心思路
- 使用 Session 存储 Referer 和 Landing Page: 首次访问时,将 HTTP_REFERER (来源页面) 和 REQUEST_URI (着陆页面) 存储在 PHP Session 中。
- 利用 Contact Form 7 过滤器: 使用 wpcf7_form_tag 过滤器,在 Contact Form 7 表单中动态填充 Referer 信息。
- 条件判断: 在填充表单之前,检查着陆页面 URL 是否满足特定条件(例如包含 “partner” 关键词)。
具体实现步骤
1. 存储 Referer 和 Landing Page 到 Session
以下代码片段用于在用户首次访问时,将 Referer 和 Landing Page 存储到 PHP Session 中。
function wpshore_set_session_values()
{
if (!session_id())
{
session_start();
}
if (!isset($_SESSION['OriginalRef']))
{
$_SESSION['OriginalRef'] = $_SERVER['HTTP_REFERER'];
}
if (!isset($_SESSION['LandingPage']))
{
$_SESSION['LandingPage'] = $_SERVER["REQUEST_URI"];
}
}
add_action('init', 'wpshore_set_session_values');
代码解释:
- session_start(): 启动 PHP Session。
- $_SERVER[‘HTTP_REFERER’]: 获取 HTTP Referer,即用户从哪个页面跳转过来的。
- $_SERVER[“REQUEST_URI”]: 获取请求的 URI,即用户访问的当前页面。
- isset($_SESSION[‘OriginalRef’]): 检查 session 中是否已经存在 OriginalRef 变量,防止重复赋值。
- add_action(‘init’, ‘wpshore_set_session_values’): 将 wpshore_set_session_values 函数挂载到 init 钩子上,确保在 WordPress 初始化时执行。
2. 使用 Contact Form 7 过滤器动态填充表单
以下代码使用 wpcf7_form_tag 过滤器,根据条件判断,动态填充 Contact Form 7 表单中的 referer-page3 字段。
function getRefererPage3( $form_tag ){
if (strpos($_SESSION['LandingPage'], 'partner') !== false) {
if ( $form_tag['name'] == 'referer-page3' ) {
$form_tag['values'][] = $_SESSION['LandingPage'];
}
}
return $form_tag;
}
if ( !is_admin() ) {
add_filter( 'wpcf7_form_tag', 'getRefererPage3' );
}
代码解释:
- strpos($_SESSION[‘LandingPage’], ‘partner’) !== false: 检查 $_SESSION[‘LandingPage’] 中是否包含 “partner” 字符串。 strpos 函数返回子字符串第一次出现的位置,如果未找到则返回 false。 !== false 用于确保返回值不是 false,因为 strpos 可能会返回 0,在弱类型比较中会被认为是 false。
- $form_tag[‘name’] == ‘referer-page3’: 检查当前处理的表单字段的名称是否为 referer-page3。
- $form_tag[‘values’][] = $_SESSION[‘LandingPage’]: 将 $_SESSION[‘LandingPage’] 的值添加到 referer-page3 字段的值数组中。
- add_filter( ‘wpcf7_form_tag’, ‘getRefererPage3’ ): 将 getRefererPage3 函数挂载到 wpcf7_form_tag 过滤器上。 wpcf7_form_tag 过滤器允许修改 Contact Form 7 表单标签的属性。
- if ( !is_admin() ): 确保代码只在前台页面执行,避免在 WordPress 后台管理界面产生影响。
3. 在 Contact Form 7 表单中使用该字段
在 Contact Form 7 表单中,添加一个名称为 referer-page3 的隐藏字段。例如:
[hidden referer-page3]
注意事项:
- 确保 PHP Session 已经正确配置和启用。
- referer-page3 字段的名称可以根据实际情况进行修改,但需要与代码中的 $form_tag[‘name’] == ‘referer-page3’ 保持一致。
- 可以根据需要修改条件判断的逻辑,例如检查 Referer 是否包含特定域名。
- 由于 HTTP_REFERER 可能为空,需要做好空值处理,避免出现错误。
- 为了提高安全性,可以对 Referer 和 Landing Page 进行验证和过滤,防止恶意代码注入。
总结
通过以上步骤,我们成功实现了在满足特定条件时,获取并使用原始 URL 来源的功能。 这种方法可以用于追踪用户来源,分析推广效果,以及为用户提供个性化的服务。 通过灵活运用 PHP Session 和 WordPress 的 wpcf7_form_tag 过滤器,我们可以轻松地实现各种复杂的表单功能。
以上就是根据条件获取原始 URL 来源(Referer)的详细内容,更多请关注php中文网其它相关文章!