upgradeder_process_complete没有在WordPress中发送$ data数组

时间:2015-08-17 13:19:45

标签: php wordpress-plugin wordpress

当我的插件升级并挂钩到upgrader_process_complete操作时,我正在尝试运行一些激活码,如下所示:

add_action('upgrader_process_complete', array('Myplugin', 'plugin_updated'));

// ...
// Declared inside Myplugin class:
public static function plugin_updated($upgrader, $data)
{
    syslog(LOG_ALERT, "upgrader run with options: " . $data);
    if (is_array($data) && $data['action'] === 'update' && $data['type'] === 'plugin')
    {
        foreach($data['plugins'] as $plugin)
        {
            syslog(LOG_ALERT, $plugin);
        }
    }
}

调用处理程序但只传入$upgrader而没有$data

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

add_action的签名如下:

add_action( $hook, $function_to_add, $priority, $accepted_args );

前两个参数是必需的。第三个和第四个是可选的:

  

$ priority (int)(可选)

     

用于指定其中的顺序   执行与特定动作相关联的功能。降低   数字与早期执行相对应,并且具有相同的功能   优先级按照添加到的顺序执行   动作。

     

默认值:10

     

$ accepted_args (int)(可选)   钩子函数接受的参数数量。在WordPress 1.5.1+中,钩子函数可能需要额外的功能   匹配do_action()或时匹配的参数   apply_filters()调用正在运行。例如,动作   comment_id_not_found将传递任何挂钩ID的函数   请求的评论。

     

默认值:1

请注意,最后一个参数$accepted_args指定了函数处理的参数数量。如果你把它留下来,只传递一个参数,这就是当只用前两个参数调用add_action时会发生什么。

要解决此问题,由于plugin_updated接受2个参数,因此需要将$accepted_args设置为2,如下所示:

add_action('upgrader_process_complete', array('Myplugin', 'plugin_updated'),
    10 , // this is $priority which we leave at 10 because it's the default
    2 ,  // Set this to 2 since plugin_updated takes two arguments 
);

感谢@Fresher指出这一点。