CF7 动态改变表单数据

CF7 Dynamically change form data

我试图通过他们的表单标签过滤器扩展 CF7 插件以满足我的需要,但是我有 运行 一个奇怪的情况。我有以下功能(在我的主题功能文件中)有点管用:

function custom_shortcode_handler( $tag, $unused ) {
    $formidable_array = get_related_vars(array('type' => 'cf7'));

    if ($tag[name] === 'user') {
        $tag[raw_values][] = $user;
        $tag[values][] = $user;
        $tag[labels][] = $user;
    }
    if ($tag[name] === 'display-name') {
        $tag[raw_values][] = $display_name;
        $tag[values][] = $display_name;
        $tag[labels][] = $display_name;
    }
    if ($tag[name] === 'email') {
        $tag[raw_values][] = $formidable_array[139];
        $tag[values][] = $formidable_array[139];
        $tag[labels][] = $formidable_array[139];
        if (!empty($formidable_array[223])) {
            $tag[raw_values][] = $formidable_array[139].', '.$formidable_array[298];
            $tag[values][] = $formidable_array[139].', '.$formidable_array[298];
            $tag[labels][] = $formidable_array[139].', '.$formidable_array[298];
        }
    }
    if ($tag[name] === 'phone') {
        $tag[raw_values][] = $formidable_array[135];
        $tag[values][] = $formidable_array[135];
        $tag[labels][] = $formidable_array[135];
    }
    if ($tag[name] === 'campaign') {
        $tag[raw_values][] = $campaign_name;
        $tag[values][] = $campaign_name;
        $tag[labels][] = $campaign_name;
    }

    return $tag;
}
add_filter('wpcf7_form_tag', 'custom_shortcode_handler', 10, 2);

在 Contact Form 7 端,我有以下字段:

[text user]
[text display-name]
[text email]
[text phone]
[text campaign]

除 phone 字段外,这些文本字段中的每一个都由上述函数正确更新。我试过将该字段切换为电话、号码、文本区域、隐藏,但无济于事。它只是不检索值,但如果我用任何字符串(没有数字)替换 $formidable_array[135] 它会起作用。如果我输入任何数字,它不再或实际上只是取出数字并留下字母。

请记住,$formidable_array[135] 不是问题,因为它可以用引号内的任何数字替换,并且输出保持不变。

需要注意的奇怪之处是,如果我要在 if 语句中打印出 $tag 数组:

    if ($tag[name] === 'phone') {
                $tag[raw_values][] = $formidable_array[135];
                $tag[values][] = $formidable_array[135];
                $tag[labels][] = $formidable_array[135];
                echo '<pre>';
                print_r($tag);
                echo '</pre>';
            }

它将打印 $tag 数组两次,首先是正确插入的 phone 值(即 raw_values、值和标签都设置为“1234567890”),然后是将所有值设置回 null 的重新发布。

我有点相信他们出于某种原因在数字插件代码中使用了某种正则表达式清理器,但我找不到它或想出解决这个问题的方法。

非常感谢任何帮助。

编辑:

似乎如果我将 $formidable_array[135] 替换为以下内容:

    if ($tag[name] === 'phone') {
                $tag[raw_values][] = '123-123-1234';
                $tag[values][] = '123-123-1234';
                $tag[labels][] = '123-123-1234';
            }

有效...但不明白为什么,因为 $formidable_array[135] 如果回显则保持相同的值。

编辑:

我需要弄清楚是什么第二次调用我的函数,在我的 $formidable_array(135) 上执行 var_dump() 让我发现第二次打印出该变量时,它是 NULL。所以 "wpcf7_form_tag" 挂钩被执行了两次??

"wpcf7_form_tag" 挂钩没有被执行两次,但 CF7 检测每个字段名称两次,不知道为什么。但这并不是最终具有 NULL 值的原因...

phone 数字并不是唯一变成 NULL 的东西,我整个强大的数组都变成了 NULL。

我的问题与我从数据库中获取强大值的方式有关。每次我的函数 运行 时,我都在创建一个新的数据库连接,这是一个很大的 NoNo。刚刚将我的外部数据库连接设为全局连接,问题就消失了。

我认为这是一个速度问题,因为有两个函数试图查询同一个数据库 table。