-
v2.0.2 Stable
released this
2026-07-18 15:38:08 +00:00 | 3 commits to main since this release2.0.2 [2026-07-18]
Fixed
- Bulk action "Enable Robots Override" no longer creates duplicate
postmetarows. The previous implementation usedINSERT ... ON DUPLICATE KEY UPDATE, but WordPress'spostmetatable has no unique key on(post_id, meta_key), so theON DUPLICATE KEY UPDATEbranch never fired and every bulk run on a post that already had the meta inserted a duplicate row. The bulk handler now usesupdate_post_meta()anddelete_post_meta()exclusively. - Bulk action "Disable Robots Override" now removes the override meta entirely (previously set its value to
0, leaving a redundant row).
Changed
- Removed three dead contexts (
feed,comment_feed,robots) that were registered, migrated, and cleaned up but never evaluated at runtime and never exposed in the admin UI. The plugin now consistently registers and evaluates 22 page contexts (down from a nominal 25). Existing orphan options from earlier installs are cleaned by the uninstall routine's wildcard delete. - Extracted
noindex_seo_get_contexts()as the single source of truth for the context list shared by settings registration, v2 migration, form processing.uninstall.phpretains its own copy (technical constraint: the main plugin file is not loaded during uninstall) with a sync warning comment. - Corrected
phpcs.xmlminimum_supported_wp_versionfrom6.6to5.7to match the plugin header. This setting was stale from before the 2.0.1 minimum-WP correction. - Updated
readme.txtdescription counts from 25 to 22 page contexts. - Bulk action performance characteristic changed: the rewrite from a single batched SQL statement to per-post
update_post_meta()/delete_post_meta()calls trades O(1) queries for O(N) queries on bulk selections, in exchange for correctness (no more duplicate rows) and proper WP meta-cache invalidation. Typical admin bulk selections (≤200 posts) are unaffected; very large selections (thousands of posts) may take noticeably longer.
Deprecated
noindex_seo_clear_transient(): was hooked toupdate_option_noindexseo, a hook that never fires becausenoindexseois the Settings API group name, not an option name. The function now emits a deprecation notice via_deprecated_function()and continues to clear thenoindex_seo_optionstransient if called directly. The transient is cleared correctly insidenoindex_seo_process_form()after every successful save. The function will be removed in a future release.
Code Quality
bin/preflight.sh: hardened temp-file handling (mktemp moved to script top,trap … EXITcleanup, no more predictable/tmp/composer-audit.*paths that were vulnerable to symlink overwrite on shared hosting); fixed2>/nulltypo; added rsync /.distignore/ build-tree-non-empty guards so the forbidden-artefact scan cannot pass vacuously; replaced npm-audit subshell withpushd/popdso gate counters are not lost.- Added
bin/preflight.sh: automated pre-deploy verification covering PHPCS, PHPStan level 9, PHPCompatibility, PHPUnit, dependency audit, and candidate-ZIP artefact inspection. Prints a PASS/FAIL report per section and exits non-zero on any failure. - Added
.claude/settings.jsondeny rules fordeploy.sh,git push,git tag, andgit merge, enforcing the agent operating boundaries mandated by AGENTS.md mechanically rather than only in prose.
Compatibility
- WordPress: 5.7 - 7.1
- PHP: 7.2 - 8.5
Tests
- PHP Coding Standards: 3.13.5
- WordPress Coding Standards: 3.3.0
- PHPStan: 2.1.55
- PHPUnit: 9.6.34
Downloads
- Bulk action "Enable Robots Override" no longer creates duplicate