我正在自行托管一个高级Wordpress插件。我试图通过让插件联系我的一个web服务器,交换JSON信息来获取插件安装的更新信息。这一切都正常工作,但有一个恼人的问题。
add_filter(\'pre_set_site_transient_update_plugins\', \'MyPlugin_check_for_plugin_update\');
function MyPlugin_check_for_plugin_update($checked_data) {
global $wp_version;
if (empty($checked_data->checked)) {
return $checked_data;
}
if (isset($checked_data->response[MYPLUGIN_BASE]) || isset($checked_data->no_update[MYPLUGIN_BASE]))
{
return $checked_data;
}
//snip - contact the api server get a $response, verify the json
if (isset($response->new_version)) {
if (version_compare(MYPLUGIN_VERSION, $response->new_version, \'<\')) {
$checked_data->response [MYPLUGIN_BASE] = $response;
} else {
$checked_data->no_update [MYPLUGIN_BASE] = $response;
}
}
return $checked_data;
}
因此,当运行插件更新检查时,此函数将查找传递给它的“checked”数组,如下所示:如果传递给函数的数组包含“checked”数组(据我所知,每个插件更新检查仅一次),函数将运行API检查,并根据是否有新版本将插件数据添加到“response”或“no update”数组中。我见过在运行插件更新检查时多次调用该函数。只要在传递“checked”时,我的插件更新数据还没有在数组中,它就会通过api调用添加到我的服务器,并且我的插件更新信息会准确地显示出它应该在哪里,以及它应该拥有的数据。
事情出错的地方:
如果插件更新数据在传递给函数时已在“response”或“no update”数组中,如下所示:
我做什么似乎无关紧要,它会被移除。您可能会注意到,在上面的代码中,我试图返回数组,如果它在其中找到插件数据。我尝试让它通过函数并再次添加更新信息,但它仍然会被删除(或者因为密钥已经存在而没有添加)。所以,问题来了。如果我的插件的更新信息已经在“响应”或“无更新”数组中,我应该如何准确地将其保留在那里?还是我真的很傻,什么都没看到?
上帝,我希望我能理解这一点。我现在很困惑。