问题描述

我已经研究了这几次,但是我的搜索并没有显示出很多,除了自定义代码,这可能是也可能不是很好的 WordPress 实践。

截至最新版本 (WordPress 3.9 “Smith”),有一个挂钩添加到插件更新过程中?我问,因为它是一个非常基本的需求,但我没有看到它添加到 codex(还) 。如果没有,开发商应采用什么常见和最佳做法?

编辑:只是为了澄清,我不是在谈论激活,而是关于更新,就是说,如果数据库有变化,否则就可以解决。

最佳解决方案

我不认为已经添加了一个动作。您可以为任何版本 look at version details,并查看添加任何新的操作。

WordPress 的方式来运行插件更新代码是什么描述 here

The proper way to handle an upgrade path is to only run an upgrade procedure when you need to. Ideally, you would store a 「version」 in your plugin』s database option, and then a version in the code. If they do not match, you would fire your upgrade procedure, and then set the database option to equal the version in the code. This is how many plugins handle upgrades, and this is how core works as well.

并附有代码示例 here

function myplugin_update_db_check() {
    global $jal_db_version;
    if (get_site_option( 'jal_db_version' ) != $jal_db_version) {
        jal_install();
    }
}
add_action( 'plugins_loaded', 'myplugin_update_db_check' );

次佳解决方案

来自 discussion where they decided not to add a custom hook/function specific to upgrade,听起来像”most people”(截至 4 年前) 使用 register_activation_hook,因为当通过管理页面升级插件时,它被调用; 自那以后,我看到的大多数例子就是这个趋势。

对于大多数使用情况,我建议不要通过 plugins_loaded 挂起,因为它会在每一页的加载中被调用。在讨论中提到了例外:通过 FTP /SVN 的升级路径是’edge cases’,因为 WP 不会有机制知道插件已更改,在这种情况下,previous answer 可能更相关。

有关使用 register_activation_hook 的’simple framework’ 示例,请参阅 https://gist.github.com/zaus/c08288c68b7f487193d1

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。