帮助调试WordPress的PHP筛选器

时间:2014-01-02 作者:user3515

我有一个用于wordpress/gravityforms的PHP过滤器,它最近刚刚停止工作,我不知道为什么。有人能帮我吗?

代码如下:

add_filter(\'gform_pre_submission_2\', \'create_company_full_name\', 10, 2, \'input_7\', \'input_6\', \'input_1\');

add_filter(\'gform_pre_submission_1\', \'create_company_full_name\', 10, 1, \'input_3\', \'input_4\', \'input_77\');

add_filter(\'gform_pre_submission_26\', \'create_company_full_name\', 10, 26, \'input_7\', \'input_6\', \'input_9\');

function create_company_full_name($entry, $form, $first, $last, $company){
    $field_we_are_checking = $company;
    $name = $_POST[$first].\' \'.$_POST[$last];
    if(empty($_POST[$field_we_are_checking])){
        $_POST[$field_we_are_checking] = $name;
    }
    return;
}
它所做的是检查该人员是否将“公司”字段留空,如果留空,则在提交前在“公司”字段中输入名字和姓氏。对于3种不同的形式,它都是这样做的。

如果我知道如何调试PHP,我会亲自尝试。但没有什么比msgboxes或任何其他方法更适合测试。有人能给我指出正确的方向吗?

非常感谢!

更新的代码:

add_filter(\'gform_pre_submission_1\', \'create_company_full_name\', 10, 2);
// 
function create_company_full_name($entry, $form){
    switch($form){
        case 1:
            $field_we_are_checking = $_POST[\'input_77\']; 
            $name = $_POST[\'input_3\'].\' \'.$_POST[\'input_4\']; 
            break;
        case 2:
            $field_we_are_checking = $_POST[\'input_1\']; 
            $name = $_POST[\'input_7\'].\' \'.$_POST[\'input_6\']; 
            break;
        case 26:
            $field_we_are_checking = $_POST[\'input_9\']; 
            $name = $_POST[\'input_7\'].\' \'.$_POST[\'input_6\']; 
            break;
    }

     if(empty($_POST[$field_we_are_checking])){ 
         $_POST[$field_we_are_checking] = $name; 
     } 
     return;
}

2 个回复
SO网友:Milo

如果您查看codex条目add_filter, 您将看到函数有4个参数,最后一个是$accepted_args, 它应该是一个整数。你的add_filter 电话不正确,所以我不确定他们一开始是如何工作的。

在挂钩函数中似乎有5个参数,所以我假定add_filters应为:

add_filter(\'gform_pre_submission_2\', \'create_company_full_name\', 10, 5);
add_filter(\'gform_pre_submission_1\', \'create_company_full_name\', 10, 5);
add_filter(\'gform_pre_submission_26\', \'create_company_full_name\', 10, 5);
也就是说,过滤器通常return 一个值,你没有,所以我也不能说这是正确的,因为我根本不知道重力的形式。

另请参见Debugging in WordPress.

SO网友:antonakos

我认为第一块代码是原始的(用来完成它的工作),第二块代码是新版本,它做了更多的事情,但还不能工作。

更新后的代码中的一个错误是$field_we_are_checking 过去是字段的名称,但这里是字段的值。

换言之,替换

$field_we_are_checking = $_POST[\'input_77\'];
使用

$field_we_are_checking = \'input_77\';
其他两种情况也是如此。

而且$form 是一个form object 而不是数字,所以

switch($form){
应替换为

switch($form[\'id\']){

结束

相关推荐

Too many actions/filters!

这里是wordpress的新成员。动作/过滤器的概念本身并不难理解。令我不知所措的是大量可用的操作和过滤器。当我阅读教程/指南时,他们会说“只需将此功能添加到wp\\U head操作或after\\U setup\\u主题”。如果没有这些教程,我究竟如何知道将该函数与该操作挂钩?作为一个初学者,我怎么会知道什么是合适的操作?有没有关于如何导航的建议?谢谢