当我的插件升级并挂钩到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
。
我在这里做错了什么?
答案 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指出这一点。