插件更新、版本依赖关系和向后兼容性

时间:2014-05-12 作者:rafiki_rafi

假设我有一个插件,目前版本为1.1,我正在发布版本1.2。运行1.2更新时,将运行一个脚本来添加新选项、列、表等。

一个月后,1.3发布了。我是否仍然需要在版本1.2中包含更新脚本,以便人们可以从v1更新插件。1直接连接到v1。3.

有没有办法让WordPress自动下载v1。2、运行更新脚本,然后下载v1。3,还是需要在v1中包含某种标志。3表示“如果从1.1或更低版本升级,请先运行v1.2更新脚本”?换句话说,是否有方法标记v1。然后说,“你需要这个插件的v1.2或更高版本才能运行这个更新”?

2 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

我是否仍然需要在版本1.2中包含更新脚本,以便人们可以从v1更新插件。1直接连接到v1。3.

有没有办法让WordPress自动下载v1。2、运行更新脚本,然后下载v1。3.

。。。是否有方法标记v1。然后说,“你需要这个插件的v1.2或更高版本才能运行这个更新”?

通常,插件作者会将插件的版本存储在选项表中。然后,要么initadmin_init, 将其与当前运行的版本进行比较(如果需要,随后运行任何适当的更新,并更新选项表中的版本)。

function wpse_144165_admin_init() {
    // If your plugin will fail on the front-end if not upgraded (typically due to
    // a drastic change in code), you\'ll need to perform this operation on "init".

    wpse_144165_upgrade();
}

add_action( \'admin_init\', \'wpse_144165_admin_init\' );

function wpse_144165_upgrade() {
    if ( $version = get_option( \'my_version\' ) ) {
        if ( version_compare( $version, MY_CURRENT_VERSION ) === -1 ) {
            // Perform upgrade(s), typically in another function/class that you extend
            // over versions to support updates from 1.0 upwards.

            update_option( \'my_version\', MY_CURRENT_VERSION );
        }
    }
}

function wpse_144165_activation() {
    // Do pre-upgrade stuff.

    wpse_144165_upgrade();

    // Do post-upgrade stuff.
}

register_activation_hook( __file__, \'wpse_144165_activation\' );
这种版本检查技术适合仍然通过旧FTP进行升级的用户,因为WordPress永远不会触发任何重新激活挂钩。

SO网友:Luke Gedeon

如果WordPress要下载每个中间版本以查看它是否包含更新脚本,那么下载的内容将比更新功能只包含累积更改的内容多得多。最好将当前版本号存储在选项中。然后在更新例行程序中检查存储的版本号,并与需要执行的每个步骤进行比较,如下所示:

if ( \'1.1\' > $stored_version ) {
  // updates to bring us up to 1.1
}
if ( \'1.2\' > $stored_version ) {
  // updates for 1.2
}
或者你可以用switch.

这里的主要思想是,如果您使用的是版本1.0,则两个块都会执行。如果1.1只有第二次火灾。你可以在这些步骤之后继续添加步骤,以便将你从任何地方带到需要的地方。

结束

相关推荐

Updates for a private plugin?

如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点