You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅当引荐来源含partner时自动填充Contact Form 7表单字段实现方案

修正方案

原有代码核心问题

  • 语法错误:parse_url($_SERVER['HTTP_REFERER'] 缺少右闭合括号,会直接触发PHP致命错误
  • 逻辑运算符错误:使用||(或)判断,会导致只要路径非空就满足条件,完全不符合「引荐来源包含partner」的需求
  • 匹配规则错误:in_array只能精准匹配完全一致的路径,无法实现「包含partner字符」的模糊匹配需求
  • 引荐来源取值错误:直接读取当前$_SERVER['HTTP_REFERER'],用户进入站点后跳转到其他页面时,当前引荐来源会变成站内地址,丢失最初的外部引荐来源
  • 缺少空值判断:未判断HTTP_REFERER是否存在,用户直接访问站点时会抛出PHP Notice级报错

修正后完整代码

// 存储用户首次进入站点的原始引荐来源和落地页
function wpshore_set_session_values() 
{
    if (!session_id()) 
    {
        session_start();
    }

    if (!isset($_SESSION['OriginalRef'])) 
    {
        // 新增空值判断,避免直接访问时抛出报错
        $_SESSION['OriginalRef'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; 
    }

    if (!isset($_SESSION['LandingPage'])) 
    {
        $_SESSION['LandingPage'] = $_SERVER["REQUEST_URI"]; 
    }
}
add_action('init', 'wpshore_set_session_values');

// 表单标签填充逻辑
function getRefererPage3( $form_tag ){  
    // 仅处理指定名称的表单标签,减少不必要的逻辑执行
    if ( $form_tag['name'] != 'referer-page3' ) {
        return $form_tag;
    }
    // 判断是否存在有效原始引荐来源
    if (empty($_SESSION['OriginalRef'])) {
        return $form_tag;
    }
    $parts = parse_url($_SESSION['OriginalRef']);
    // 路径非空且路径中包含partner字符时才填充值
    if (!empty($parts['path']) && strpos($parts['path'], 'partner') !== false) {   
        $form_tag['values'][] = $_SESSION['LandingPage'];
    }
    return $form_tag;
}

if ( !is_admin() ) {
    add_filter( 'wpcf7_form_tag', 'getRefererPage3' );
}

关键逻辑说明

  • 优先读取首次进入站点时存储在session中的原始引荐来源,避免后续站内跳转丢失引荐信息
  • 提前过滤非目标表单标签,减少无用逻辑执行
  • 使用strpos做模糊匹配,只要路径中包含partner字符就满足条件,同时使用!== false避免匹配位置在路径开头时的判断异常
  • 逻辑运算符改为&&(且),需要同时满足「路径非空」和「路径包含partner」两个条件才会填充表单值

内容的提问来源于stack exchange,提问作者Vell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:27:03