Wordpress插件 - 自托管更新

Eyp*_*eon 6 wordpress

我正在开发一个需要更新的Wordpress插件,尽管我的服务器正在检查插件版本.我开发了几个插件,它们使用完全相同的服务器来检查新版本.我遇到的问题是,当所有插件都需要更新并且我单击查看详细信息时,其中一个插件将显示更新的详细信息(版本,描述等),但其他插件不会显示任何信息.经过一些调试后,我可以看到服务器肯定会返回数据.

我的问题是,如何在不与其他插件冲突的情况下多次应用plugins_api过滤器?

小智 11

你的观察是正确的.这并不明显.即使是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
        );//../..
Run Code Online (Sandbox Code Playgroud)

通过这个测试,每次调用钩子列表时,只有一个 - 相关的插件 - 给出正确的答案来显示初始窗口的信息.

如果我有时间,我可能会很快发布一篇关于类的更完整的文章来管理这个备用的强大API以及如何将它添加到-private-插件中.

  • 为了让每个人都清楚,关键是书中的代码返回布尔值'false',而上面的代码返回PHP变量'$ false'.非常微妙,但差异很大.谢谢你的回答+ 1. (4认同)
  • 将第一个,呃,参数重命名为"$ false"之外的东西是一个很好的论据.为什么不试试`$ original`? (3认同)