我正在尝试通过表单标签过滤器扩展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”钩子被执行了两次??
答案 0 :(得分:0)
&#34; wpcf7_form_tag&#34;钩子没有被执行两次,但是CF7正在检测每个字段名称两次,不知道为什么。但这并不是最终导致NULL值的原因......
电话号码不是唯一变为NULL的东西,我的整个强大阵列都变成了NULL。
我的问题与我从数据库中获取强大值的方式有关。每次我的函数运行时,我都在创建一个新的数据库连接,这是一个很大的NoNo。刚刚将我的外部数据库连接作为全局数据库连接,问题就消失了。
我认为这是速度问题,因为有两个函数试图查询同一个数据库表。