有没有办法测试一个只在插件更新时运行的函数是否成功运行?

时间:2017-04-04 作者:learning_13

是否有任何方法可以测试仅在插件更新上运行的函数是否成功运行?现在,若配置文件中存在的WP版本和数据库中插件版本的值不一样,那个么我将调用该函数,并通过更改常量的值进行测试。但还有其他更好的方法吗?

1 个回复
SO网友:Nathan Johnson

是否有任何方法可以测试仅在插件更新上运行的函数是否成功运行?

后台更新插件时,WordPress会在后台执行几个操作。

下载插件的新版本,停用旧插件版本,删除旧插件版本,提取新版本,激活新版本upgrader_process_complete. 此挂钩向回调传递两个参数:$this, 这显然是对象实例$options[\'hook_extra\'], 这些是传递给由调用的筛选器挂钩的额外参数WP_Upgrader::install_package(). 这个Plugin_Upgrader 类传递以下数组:

array( \'plugin\' => $plugin,
       \'type\' => \'plugin\',
       \'action\' => \'update\',
)
因此,如果我们想在插件升级上运行函数,我们可以使用这个钩子。

add_action( \'upgrader_process_complete\', \'wpse_262412_upgrader_process_complete\' );
function wpse_262412_upgrader_process_complete( $instance, $extras ) {
  //* Only interesting when \'our\' plugin updates
  if(
    \'plugin\' !== $extras[ \'type\' ] &&
    \'update\' !== $extras[ \'action\' ] &&
    \'my-plugin-name\' !== $extras[ \'plugin\' ]
  ) {
    return;
  }
  //* Do something useful after your plugin updates
  wpse_262412_something_useful();
}
检查

如果您正在开发插件,并且希望在插件更新时运行特定功能,则可以向数据库中添加一个选项:

function wpse_262412_something_useful() {
  include_once( ABSPATH . \'/wp-admin/includes/plugin.php\' );
  $data = get_plugin_data( \'my-plugin-name\' );
  update_option( \'my-plugin-update-option\', $data[ \'version\' ] );
}
然后,我们可以向init添加一个检查该选项值的操作。如果选项值等于当前插件版本,则我们知道该函数已运行。然后我们可以确保我们可以看到该功能已经运行,比如添加管理通知。

add_action( \'init\', \'wpse_262412_init\' );
function wpse_262412_init() {
  $data = get_plugin_data( \'my-plugin-name\' );
  $option = get_option( \'my-plugin-update-option\' );
  if( $data[ \'version\' ] === $option ) {
    //* The plugin update function ran successfully
    add_action( \'admin_notices\', \'wpse_262412_update_notice\' );
  }
}

function wpse_262412_update_notice() {
?>
  <div class="updated notice">
    <p><?php _e( \'The function has run correctly.\', \'wpse-262412\' ); ?></p>
  </div>
  <?php
}
但还有其他更好的方法吗?

这比你的方法好吗?我不知道。取决于您的应用程序。它不涉及打开和读取配置文件,因此可能会更快。但可能不太明显。我不会在生产现场使用这两种方法。确保您的代码在开发服务器上工作,然后使用它。如果你说的是比较插件版本号,那么对我来说,这似乎是最好的方法。

相关推荐

WP plugin updates

我为WordPress编写了一个插件,需要定期更新。是否可以通知用户新版本可用(其他一些插件具有某种类型的此选项-当新版本可用时,用户可以在其管理面板中查看并更新-所有内容都使用一些内置的WP功能…)