Skip to content

What a pin blocks

Every way an update can reach a pinned plugin or WordPress, what happens on each, and how to let an update through when you are ready. Pins are set under Tools → Version Pin → Pins.

Every way of updating

A pin is checked wherever WordPress decides whether a plugin moves. A version the pin allows goes through as usual. A version it does not allow is hidden where it would be offered, and refused where it would be installed.

Six ways an update arrives, each checked against the pin: the update offer, an automatic update, a manual update, a zip upload, a reinstall and WP-CLI. A version inside the pin goes through; one outside it is refused with a message Six ways an update arrives, each checked against the pin: the update offer, an automatic update, a manual update, a zip upload, a reinstall and WP-CLI. A version inside the pin goes through; one outside it is refused with a message

Every route meets the same check.

The update offer

An update past the pin is not shown on the Plugins screen or under Dashboard → Updates, so nobody updates by habit. A line under the plugin says what is being held back instead, for example "5.7.2 is available, held back by this pin." That line comes from WordPress's own update check: Version Pin makes no request of its own for it.

An update inside the pin is offered as usual.

Automatic updates

An automatic update past the pin is refused, even when automatic updates are switched on for the plugin. An automatic update inside the pin, such as 5.3.8 under a patch-only pin at 5.3.7, still installs.

Version Pin never switches automatic updates on or off.

Manual updates

The update link, a bulk update from the Plugins screen and Dashboard → Updates all install through WordPress's updater, which checks the pin before it replaces any file. A version past the pin is refused with the message below, and the plugin stays as it was.

Uploading a zip

When you upload a plugin's zip under Plugins → Add New Plugin → Upload Plugin, Version Pin reads the version inside the zip. A version past the pin is refused straight away, before WordPress offers Replace current with uploaded, and the installed plugin is left untouched. A version the pin allows goes on as usual.

The upload of akismet.5.4.zip refused by Version Pin: the message names the pin at 5.3.7, its note, the refused version 5.4 and how to allow it

A zip past the pin, refused before anything is replaced.

Reinstalling a deleted plugin

Deleting a pinned plugin does not remove its pin: the pin shows Missing. If you install the plugin again, from the plugin directory, from a zip or through the REST API, a version past the pin is refused. Install the pinned version, or remove the pin first.

WP-CLI

The same check runs for the command line. wp plugin update does not move a pinned plugin past its pin, and wp plugin install <plugin> --version=<version> --force with a version past the pin fails with the message. There is no flag to get past a pin: a pin the command line ignores is not a pin. Remove it first with wp version-pin remove <plugin> (see WP-CLI).

WordPress core

When WordPress itself is pinned:

  • Offers: a WordPress release past the pin is not offered. Under a patch-only pin, the newest release of the pinned series is still offered.
  • Automatic updates: an automatic WordPress update past the pin is refused; one inside the pin still installs.
  • Manual updates: an update past the pin is refused before anything is downloaded, whether it is started under Dashboard → Updates or with wp core update --version=<version>.

The message you see

When an update is refused, WordPress shows Version Pin's message where the update would have run: on the update screen, in the upload result, or as the error from WP-CLI. For a plugin it reads:

"Update blocked by Gorilla Version Pin. Akismet Anti-spam: Spam Protection is pinned at 5.3.7 (patch releases in 5.3.x allowed). Note: 5.4 changes the comment form. Testing on staging first. This package is version 5.7.2. To allow it, raise or remove the pin in Tools → Version Pin, or run: wp version-pin remove akismet"

Part by part:

Part What it tells you
"Akismet Anti-spam: Spam Protection is pinned at 5.3.7 (patch releases in 5.3.x allowed)." Which pin stopped the update. An exact pin reads "pinned at 5.3.7 (exact)".
"Note: …" The note saved with the pin. Left out when the pin has no note.
"This package is version 5.7.2." The version that was refused.
"To allow it, …" What to change, on the screen or from the command line.

If the version inside a package cannot be read, the package is refused too, because Version Pin cannot tell whether the pin allows it: "The version of this package could not be read, so it is refused while the pin exists."

For WordPress the message reads, for example: "Update blocked by Gorilla Version Pin. WordPress is pinned at 7.1.3 (patch releases in 7.1.x allowed). This package is version 7.2. To allow it, raise or remove the WordPress pin in Tools → Version Pin."

Allow an update

When you are ready for a newer version, change the pin, then update as usual:

  • Raise the pin to the new version: see Change a pin.
  • Switch Patch releases on, if you only want the fixes in the pinned series.
  • Remove the pin: see Remove a pin, or run wp version-pin remove <plugin> (WP-CLI).

The update is offered again with WordPress's next update check. To see it straight away, choose Check again under Dashboard → Updates.

What no plugin can stop

Files copied onto the server without WordPress: over FTP or SFTP, with a git pull, or by a deploy tool. WordPress is not asked, so no plugin hears about it. Version Pin shows the result instead: the pin's state becomes Drift, and you can roll the plugin back or raise the pin. See Drift.

When file changes are disabled

Some sites switch off every file change in WordPress, for example with DISALLOW_FILE_MODS in wp-config.php. Then nothing can update through WordPress at all, and the Pins tab says: "File changes are disabled on this site, so nothing can update anyway. Pins are kept for when that changes."

Administrators can still see and change their pins on such a site.

While Version Pin is deactivated

Pins do not apply while the plugin is deactivated: updates behave as if it were not installed. Your pins are kept, and apply again as soon as you reactivate it. When you delete the plugin, its pins are deleted with it.

Next step

Older-series fixes: let a patch-only pin receive a fix that WordPress itself never offers.