首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CF7动态更改表单数据

CF7动态更改表单数据
EN

Stack Overflow用户
提问于 2017-03-13 07:07:29
回答 1查看 1.3K关注 0票数 0

我试图通过他们的表单标签过滤器扩展CF7插件以满足我的需要,但是我遇到了一个奇怪的情况。我有以下功能(在我的主题函数文件中),有些工作:

代码语言:javascript
复制
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中,我有以下字段:

代码语言:javascript
复制
[text user]
[text display-name]
[text email]
[text phone]
[text campaign]

这些文本字段中的每一个都由上面的函数正确地更新,但电话字段除外。我试过把那个字段切换到电话,号码,文本区域,隐藏,没有效果。它只是不检索值,但是如果我用任何字符串(没有数字)替换$formidable_array[135],它就会工作。如果我输入了任何数字,它就不会再或者实际上只是取出数字并留下字母。

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

值得注意的是,如果我要在if -语句中打印$tag数组,则如下所示:

代码语言:javascript
复制
    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、values和标签都设置为'1234567890'),然后是将所有值设置为null的重发。

我有点相信他们在插件代码中有某种Regex清洁器,不管出于什么原因,但是我找不到它,也找不到解决这个问题的方法。

任何帮助都是非常感谢的。

编辑:

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

代码语言:javascript
复制
    if ($tag[name] === 'phone') {
                $tag[raw_values][] = '123-123-1234';
                $tag[values][] = '123-123-1234';
                $tag[labels][] = '123-123-1234';
            }

起作用了..。但是,不要理解为什么,因为如果回显相反,$formidable_array135拥有相同的值。

编辑:

我需要弄清楚第二次调用我的函数是什么,在我的var_dump()上做一个$formidable_array(135)让我发现第二次输出这个变量时,它是空的。所以"wpcf7_form_tag“钩子被执行了两次??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-19 23:54:46

"wpcf7_form_tag“钩子不会执行两次,但是CF7会两次检测每个字段名,但不确定原因。但这不是最终拥有空值的原因..。

电话号码不是唯一变为空的东西,我的整个强大的数组都变成了空。

我的问题与我如何从数据库中获得令人敬畏的价值有关。每次函数运行时,我都会创建一个新的DB连接,这是一个很大的NoNo。使我的外部DB连接成为一个全局连接,问题就消失了。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42758115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档