CF7动态更改表单数据

时间:2017-03-13 07:07:30

标签: php wordpress contact-form-7

我正在尝试通过表单标签过滤器扩展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);

在联系表格7方面,我有以下字段:

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

除电话字段外,上述功能正确更新了这些文本字段中的每一个。我已经尝试将该字段切换到tel,number,text area,hidden,无济于事。它只是不检索值,但如果我用任何字符串(没有数字)替换$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数组两次,首先是正确插入的电话值(即raw_values,值和标签都设置为'1234567890'),然后是重新发布,所有值都设置为null

我有点确信,无论出于何种原因,他们都会在插件代码中使用某种Regex清理器,但我无法找到它或找到解决此问题的方法。

非常感谢任何帮助。

修改

似乎我用以下内容替换$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]在相反的情况下保持相同的值。

修改

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

1 个答案:

答案 0 :(得分:0)

&#34; wpcf7_form_tag&#34;钩子没有被执行两次,但是CF7正在检测每个字段名称两次,不知道为什么。但这并不是最终导致NULL值的原因......

电话号码不是唯一变为NULL的东西,我的整个强大阵列都变成了NULL。

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

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