The Enable auto-updates toggle was missing for this plugin on the Plugins screen. It's now shown.
Why
WordPress only renders the auto-updates toggle for a plugin that appears in the update_plugins site transient's responseorno_update list — that presence is what sets core's internal update-supported flag. UpdateChecker::provideUpdate() only populated the response side (when a newer release existed), so between releases the plugin was absent from the transient entirely and core treated it as not update-supported → no toggle. (This is unrelated to being in the wordpress.org directory.)
How
provideUpdate() now returns a no_update payload (installed version, empty package) whenever no newer release is offered — including when the Gitea release lookup fails — so the plugin stays in the transient and the toggle appears and persists. The response path (one-click and unattended updates) is unchanged.
src/Update/UpdateChecker.php — return the no_update payload instead of passing false through when current/failed.
tests/Unit/Update/UpdateCheckerTest.php — the not-newer / failure / no-asset cases now assert the no_update payload.
docs/features/plugin-self-update.md, CHANGELOG.md — documented under 1.1.1.
Testing
composer test (513 tests), composer lint, composer cs all pass.
## What
The **Enable auto-updates** toggle was missing for this plugin on the Plugins screen. It's now shown.
## Why
WordPress only renders the auto-updates toggle for a plugin that appears in the `update_plugins` site transient's `response` **or** `no_update` list — that presence is what sets core's internal `update-supported` flag. `UpdateChecker::provideUpdate()` only populated the `response` side (when a newer release existed), so between releases the plugin was absent from the transient entirely and core treated it as not update-supported → no toggle. (This is unrelated to being in the wordpress.org directory.)
## How
`provideUpdate()` now returns a `no_update` payload (installed version, empty package) whenever no newer release is offered — including when the Gitea release lookup fails — so the plugin stays in the transient and the toggle appears and persists. The `response` path (one-click and unattended updates) is unchanged.
- `src/Update/UpdateChecker.php` — return the `no_update` payload instead of passing `false` through when current/failed.
- `tests/Unit/Update/UpdateCheckerTest.php` — the not-newer / failure / no-asset cases now assert the `no_update` payload.
- `docs/features/plugin-self-update.md`, `CHANGELOG.md` — documented under 1.1.1.
## Testing
`composer test` (513 tests), `composer lint`, `composer cs` all pass.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
WordPress only renders the "Enable auto-updates" toggle for a plugin that
appears in the update_plugins transient's response or no_update list, which
is what sets core's update-supported flag. UpdateChecker only populated the
response side (when a newer release existed), so between releases the plugin
was absent from the transient and the toggle never showed.
provideUpdate() now returns a no_update payload (installed version, empty
package) whenever no newer release is offered — including when the release
lookup fails — so the plugin stays in the transient and the toggle appears.
The response path (one-click and unattended updates) is unchanged.
Bumps to 1.1.1 so the fix ships to installed sites via the self-updater.
Co-Authored-By: Claude Opus 4.8 <[email protected]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
The Enable auto-updates toggle was missing for this plugin on the Plugins screen. It's now shown.
Why
WordPress only renders the auto-updates toggle for a plugin that appears in the
update_pluginssite transient'sresponseorno_updatelist — that presence is what sets core's internalupdate-supportedflag.UpdateChecker::provideUpdate()only populated theresponseside (when a newer release existed), so between releases the plugin was absent from the transient entirely and core treated it as not update-supported → no toggle. (This is unrelated to being in the wordpress.org directory.)How
provideUpdate()now returns ano_updatepayload (installed version, empty package) whenever no newer release is offered — including when the Gitea release lookup fails — so the plugin stays in the transient and the toggle appears and persists. Theresponsepath (one-click and unattended updates) is unchanged.src/Update/UpdateChecker.php— return theno_updatepayload instead of passingfalsethrough when current/failed.tests/Unit/Update/UpdateCheckerTest.php— the not-newer / failure / no-asset cases now assert theno_updatepayload.docs/features/plugin-self-update.md,CHANGELOG.md— documented under 1.1.1.Testing
composer test(513 tests),composer lint,composer csall pass.🤖 Generated with Claude Code