788ddccfb3
- On a cache miss the filter fell back to get_option(): with the values now written to the cache, the option is absent, so WordPress added its name to `notoptions` for good (dev36: +1,000 entries for 1,000 posts, one array loaded on every miss); a hit kept the old row in the options cache group with no expiry, which slowed the selective Redis flush (8.9 s, BUSY). The cache is now the only store for reads and deletes; old rows wait for cleanup-hp-transients --options. Without an object cache nothing changes. - Verify: HivepressTransientFilterTest (2 RED before); dev36 notoptions 210 → 210 over 1,000 posts (was 128 → 1,128) - PR: PR-089c
83 lines
3.0 KiB
Markdown
83 lines
3.0 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to this AddOn will be documented here.
|
||
|
||
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
||
Versioning follows [Semantic Versioning](https://semver.org/).
|
||
|
||
---
|
||
|
||
## [Unreleased]
|
||
|
||
---
|
||
|
||
## [0.3.0] — 2026-09-27
|
||
|
||
Released with 2meet-data-optimizer 1.2.0 (hardening 2.2).
|
||
|
||
### Changed
|
||
|
||
- With a persistent object cache (`wp_using_ext_object_cache()`), the
|
||
transient filter keeps HivePress's per-post transient pairs in the
|
||
`tmdo_hp_transient` cache group instead of `wp_options`, where they piled
|
||
up (1.15 M pairs on dev36). The cache is then the only store: rows written
|
||
before are neither read nor deleted (HivePress rebuilds those caches once),
|
||
because a `get_option()` miss adds the name to WordPress's `notoptions` for
|
||
good and a hit keeps the old row in the `options` cache group with no expiry.
|
||
Without an object cache nothing changes. After upgrading, remove the rows
|
||
left behind with core's `wp tmdo cleanup-hp-transients --options --confirm`.
|
||
|
||
### Fixed
|
||
|
||
- The detected / bound status cells of the HivePress admin table go through
|
||
`esc_html()` (2.1 audit); output unchanged.
|
||
|
||
### Docs
|
||
|
||
- `docs/REGISTERED-KEYS.md`: the six registered keys HivePress never writes
|
||
as meta, because its models alias them to core columns (listing
|
||
`hp_vendor` → `post_parent`, `hp_status` → `post_status`; request
|
||
`hp_status`, `hp_user`; vendor `hp_user`; review `hp_rating` →
|
||
`comment_karma`). The schema stays; their flat columns are always NULL.
|
||
- `docs/HIVEPRESS-COVERAGE.md`: dev36 inventory of the meta each HivePress
|
||
post type holds, where the extensions keep their data and the query shapes
|
||
the front end produces. Attribute auto-registration is not needed now:
|
||
every meta key HivePress queries is registered.
|
||
|
||
---
|
||
|
||
## [0.2.0] — 2026-09-26
|
||
|
||
Released with 2meet-data-optimizer 1.1.0 (hardening 2.1, search-index mode).
|
||
|
||
### Changed
|
||
|
||
- HivePress model query / search hooks (`optimize_query`, `optimize_search`)
|
||
are no longer bound while core's post router is active
|
||
(`TMDO_Post_Query_Router::is_router_active()`): core routes HivePress
|
||
searches, including `_sort`, to the entity flat tables, and two routers
|
||
would claim the same clauses.
|
||
|
||
### Added
|
||
|
||
- `tests/integration/`:bootstrap(複用核心的 integration bootstrap,連真實
|
||
MariaDB)+ `phpunit-integration.xml` + CI job,移植 5 個測試檔
|
||
(`HivepressIntegrationTest`、`HivepressTermCommentFieldsTest`、
|
||
`HivepressTransientFilterTest`、`ListingMetaInterceptorTest`、
|
||
`TermCommentBackfillTest`),共 57 tests。
|
||
- `tests/unit/ListingStatsTest.php`(9 tests)。unit bootstrap 先 define
|
||
`TMDO_TEST_SKIP_LISTING_STATS_STUB`,核心 bootstrap 便會跳過它的
|
||
`TMDO_Listing_Stats` stub,改載入本 AddOn 的真實實作。145 → 154 tests。
|
||
|
||
- Phase 3 implementation in progress.
|
||
|
||
---
|
||
|
||
## [0.1.0] — TBD
|
||
|
||
### Added (initial release, scaffold)
|
||
|
||
- Plugin scaffold from `wp-data-optimizer v2.16.0` extraction plan.
|
||
- Plugin Header + bootstrap stub + 7 MD + composer.json.
|
||
- Requires Plugins: `2meet-data-optimizer`, `hivepress`.
|