Is there a way to test run a theme through the automatic updater?
We have a theme where a version will introduce new functionality which might break existing themes. I would like to check previous theme version upon upgrade and include some upgrade-specific code if the upgrade is between two certain versions.
I first thought I could use after_theme_switch
hook, but the theme is mainly used as parent theme and will probably be upgraded while not being the active theme. I have looked into using upgrader_pre_install
and upgrader_post_install
hooks, but how to I test these?
The ultimate would be to have it as a unit test, but any other way to mock-upgrade would be great. Uploading a zip file is treated as an install and not upgrade.
Is this even possible from within a theme, our should I look into writing a mock-upgrade plugin?
You are asking two questions. The one being how can you test an update and the other being how can you run code after an update.
You can test a theme update by pushing the updates out your self and testing it if it works. You can do that by using GitHub Updater.
If you want to run code only after a upgrade there is no core solution. There are two ways it could work.
I think the
after_setup_theme
should be fine.This is the solution I found myself so far. My code can be found in this gist: https://gist.github.com/middlesister/8652490
Fetch previous theme version and store it in a transient on
upgrader_pre_install
. Compare the previous theme version onupgrader_post_install
and see if the upgrade is from a specific version. Set a flag in the transient if it is.Check the transient and if the flag is set, do what I need and delete the transient afterwards. I tried the
upgrader_process_complete
hook but it didn’t seem to work so I added that on theinit
hook. This means the code will be executed on next page refresh, but since the transient is set to live for an hour I can live with that.The unit tests are passing, and I tried putting the code in a plugin while using the automatic updater to upgrade from an old version to the current version and it seems to do what I want.
The problem is I need to get this code executed somehow.