Some weeks ago, I acquired an email approximately WP Photo Sphere, a WordPress plugin I evolved. There became a big problem: updating the plugin broke it on a few installations. After a few investigation, I determined that the hassle got here from the options used by the plugin: these installations hadn’t any default values for the new options I added.
Often, converting documents isn’t enough to correctly replace something. For instance, when you manually replace the WordPress files to a new edition, the platform will ask you to hit a button to update the database too.
Assume which you use options on your plugin. As your plugin evolves, you’ll need more options in new variations. Creating new alternatives while a consumer turns on your plugin for the first time is easy, you just have to use the activation hook.
The activation hook can seem a bit difficult. After all, whilst you routinely update a plugin, it’s far deactivated and reactivated, so we should assume this hook to be referred to as. But it’s no longer the case.
To be more particular, it becomes, however, WordPress stopped this behavior in model three.1. The improvement team defined this choice, and you may study the whole explanation at the Make WordPress Core blog. The major reason is that it wasn’t called each time is that if a user manually updates a plugin, the activation hook may be skipped.
So WordPress doesn’t offer a default manner to routinely call a characteristic proper after a plugin update. That’s why you’ll need to build your very own manner.
How To Handle an Update Process
In this part of the academic, I’ll show you how to robotically call a given characteristic right after an update of your plugin. We’ll see within the next element how to properly handle the updates of current alternatives, and the advent of new ones (in the identical function).
The Principle of this Method
The international principle of our technique could be that we’ll store the version quantity of our plugin in places: in a constant inside the important file of the plugin, and in a choice within the database.
The variety inside the database will store the model presently established by means of the user, at the same time as the quantity within the constant is the current model. If those numbers are extraordinary, then the database alternatives have now not been updated since the ultimate plugin update, so we’ll want to do it.
In this example, we name a function that updates all the vital options. This feature also updates the version number stored in the database: that way, we gained call this characteristic greater than vital.
Now that we’ve covered what we’ll do, it’s time to code! First, upload a consistent definition in the essential record of your plugin, with your modern version variety as a cost. In order to prevent any issues, we test if it does now not go out yet.
The Checking Function
We want now to jot down a function a good way to check if the database desires to be up to date. This function will compare the previously described regular with the cost currently saved inside the database. To do this, we’ll make sure that our function is known as anywhere, with the movement plugins_loaded, induced as soon as all the plugins are loaded.
So why can we call the activation feature? To be clear, we ought to create a brand new function, devoted to the update technique. But, in case you do this, you’ll see that this new feature could be very much like activation, as updating an alternative may be executed the same manner we create one.
Updating the Version Number within the Database
You can do anything you need within the activation characteristic known as above. However, there may be one aspect needed, updating the model variety saved inside the database. That way, we gained call our feature every time a web page is loaded.
Updating any choice may be finished the equal manner we updated the version quantity: you call update_option(), and you’re executed, although it’s the first time WordPress sees the choice.
However, we don’t constantly want to update the alternatives values. In reality, in case you use options, it’s regularly for letting your users personalize settings. By using update_option() you’ll override the customers’ selections every time you replace the plugin, which isn’t always what we want to do.
Above, we noticed that get_option() returns fake if the choice doesn’t exist. We’ll use this conduct to check if the choice we need to update exists within the database. If this is the case, we don’t do whatever. Otherwise, we create the option.