我正在开发一个需要更新的Wordpress插件,尽管我的服务器正在检查插件版本。我开发了几个插件,它们使用完全相同的服务器来检查新版本。我遇到的问题是,当所有插件都需要更新并且我单击查看详细信息时,其中一个插件将显示更新的详细信息(版本,描述等),但其他插件不会显示任何信息。经过一些调试后,我可以看到服务器肯定会返回数据。
我的问题是,如何在不与其他插件冲突的情况下多次应用plugins_api过滤器?
答案 0 :(得分:10)
你的观察是正确的。这并不明显。即使是Brad和Ozh的书(插件开发编辑Wrox)也包含了“创建自己的API存储库”一章中第267页的示例中的错误。 和你一样,我花了很少的时间在备用API中找到两个插件的问题...
解决方案: 请记住,WP过滤器中的第一个参数是传递给过滤器的原始值。 所以要连接过滤器(使用备用api插件列出)......第一行必须是:
function xiliw_altapi_information( $false, $action, $args ) {
$plugin_slug = plugin_basename( __FILE__ );
// Check if this plugins API is about this plugin
if( $args->slug != $plugin_slug ) {
return $false; // var to conserve the value of previous filter of plugins list in alternate api. fixes book error not val false
}
// POST data to send to your API
$args = array(
'action' => 'plugin_information',
'plugin_name' => $plugin_slug,
'version' => $transient->checked[$plugin_slug],
'registration' => $this->registration
);//../..
通过执行此测试,每次调用挂钩列表时,只有一个 - 相关插件 - 给出了正确的答案,以显示启动窗口的信息。
如果我有时间,我可能会很快发布一篇关于类的更完整的文章来管理这个替代的强大API以及如何将它添加到-private-插件。