From 303781e68b8783f5042493903626f7b226113c46 Mon Sep 17 00:00:00 2001 From: wpdev Date: Sun, 27 Sep 2026 16:46:55 +0800 Subject: [PATCH] docs(2meet-data-optimizer): 1.3.0 release notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - version 1.3.0; CHANGELOG and readme.txt for PR-090a, 091, 093 (verified, no change), 094–098, with the post-upgrade steps (first CLI / cron run adds the HivePress indexes; INFO lines need WP_DEBUG_LOG) - Verify: composer test (701) - PR: PR-101 --- 2meet-data-optimizer.php | 4 ++-- CHANGELOG.md | 44 ++++++++++++++++++++++++++++++++++++++++ readme.txt | 10 ++++++++- 3 files changed, 55 insertions(+), 3 deletions(-) diff --git a/2meet-data-optimizer.php b/2meet-data-optimizer.php index 1d11b45..88e3549 100644 --- a/2meet-data-optimizer.php +++ b/2meet-data-optimizer.php @@ -3,7 +3,7 @@ * Plugin Name: 2meet Data Optimizer * Plugin URI: https://2meet.io/2meet-data-optimizer * Description: 通用 WordPress 反 EAV 引擎:將 postmeta / usermeta / termmeta / commentmeta 自動分流至四象限扁平表(Hot / Warm / Cold / Archive),大幅提升搜尋與篩選效能。從 wp-data-optimizer v2.16.0 提煉的純核心,整合層交給 11 個 AddOn。 - * Version: 1.2.0 + * Version: 1.3.0 * Requires at least: 6.0 * Tested up to: 6.9.4 * Requires PHP: 8.1 @@ -26,7 +26,7 @@ if ( ! defined( 'ABSPATH' ) ) { } // ── Constants ────────────────────────────────────────────────────────────── -define( 'TMDO_VERSION', '1.2.0' ); +define( 'TMDO_VERSION', '1.3.0' ); define( 'TMDO_DB_VERSION', '2.1.0' ); define( 'TMDO_PATH', plugin_dir_path( __FILE__ ) ); define( 'TMDO_URL', plugin_dir_url( __FILE__ ) ); diff --git a/CHANGELOG.md b/CHANGELOG.md index dc94987..16d5fd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,50 @@ Versioning follows [Semantic Versioning](https://semver.org/). --- +## [1.3.0] — 2026-09-27 — 大表索引、路由計數與稽核修正(hardening 2.3) + +**性質**:效能 + 稽核修正。無 schema 變更(宣告的複合索引以 ALTER ADD INDEX 就地加上)。 +搭配 HivePress AddOn 0.4.0、WooCommerce AddOn 0.3.0。來源:dev36 規模壓測(90 萬 listing) +與系列稽核(2026-09-27)。 + +### Changed + +- **group 宣告的複合索引只在 WP-CLI 或 WP-Cron 加上**:網頁請求(包括 auth_redirect 之前的 + `/wp-admin/` 與 `admin-post.php`)改排單次事件 `tmdo_ensure_group_indexes`;以 MySQL + `GET_LOCK` 保證同一時間只有一個程序執行 ALTER;每個 ALTER 都成功才記錄已套用,失敗記 + `schema.index_failed` 並保留在 `doctor` 的 `[INDEX]` 待辦;新表在 CREATE TABLE 時就帶上 + 索引。filter:`tmdo_schema_ddl_allowed`。dev36 90 萬列加兩個索引約 4.7 s。(PR-090a) +- **路由搜尋的 found rows**:帶 `post__not_in` 的查詢(HivePress 每頁送一組隨機排除清單) + 改為「不含排除條件的 COUNT(快取)」減去「排除清單中符合條件的篇數(主鍵查詢)」,結果 + 精確,快取不再被打散。dev36 關鍵字 + 價格:首次 5.25 s、之後 3.2 s(原生 3.35 s)。(PR-091) +- `POST /wpdo/v1/listings/{id}/view` 被限流擋下時,`wpdo_rl_stats` 改為 1/10 抽樣寫入 + (每次 +10),匿名請求不再 1:1 放大成 option 寫入。(PR-094) +- `TMDO_Logger::info()` / `notice()` 只在 `WP_DEBUG_LOG` 時寫 error_log + (filter `tmdo_log_info`);`debug()`、`warning()`、`error()` 不變。(PR-095) +- 公開 listings REST 一律不輸出名稱像 email、phone、address、IP 的欄位,即使宣告 + `show_in_rest`。(PR-096) + +### Fixed + +- 後台主頁與設定精靈第 4 步的表單改在 `load-{page}`(輸出前)處理,`wp_safe_redirect()` + 可以正常生效;精靈快照失敗改以 `snap_failed=1` 導回。(PR-097) +- `uninstall.php` 的全域變數加上 `$wpdo_` 前綴(WordPress.org Plugin Check)。(PR-098) + +### Security(已驗證,無程式變更) + +- 快照目錄在 nginx 下的外洩風險(稽核 Medium):快照檔名含 64-bit 隨機值、遷移備份檔名含 + 12 字元隨機 job id,目錄有 index.php 擋列表;`doctor` 的 HTTP 探測與 nginx 後台提示已存在。 + dev31 探測全為 403。不採用「目錄名加隨機後綴」:各站 nginx deny 規則比對 `wpdo-backups/`, + 改名反而讓新快照脫離保護。(PR-093) + +### 升級後 + +- 部署後第一個 WP-CLI 指令或 WP-Cron 會為 HivePress AddOn 0.4.0 宣告的索引執行 ALTER + (90 萬列約 5 s);`DISABLE_WP_CRON` 且沒有系統 cron 的站,執行一次 `wp tmdo doctor` 即可。 +- CLI 輸出不再夾帶 `[WPDO][INFO]`;要看請定義 `WP_DEBUG_LOG` 或加上 `tmdo_log_info` filter。 + +--- + ## [1.2.0] — 2026-09-27 — 漂移偵測、範圍收斂、CLI 與診斷(hardening 2.2) **性質**:功能 + 資料正確性修正。無 schema 變更。延續 ADR-004 的搜尋索引模式;搭配 diff --git a/readme.txt b/readme.txt index 7cb6d7b..ee06e6f 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: performance, database, postmeta, optimization, hivepress Requires at least: 6.0 Tested up to: 6.9 Requires PHP: 8.1 -Stable tag: 1.2.0 +Stable tag: 1.3.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -107,6 +107,14 @@ The Classifier tab analyzes your existing `wp_postmeta` data (access frequency, == Changelog == += 1.3.0 = +* Declared flat-table indexes are added only from WP-CLI or WP-Cron, one process at a time (MySQL GET_LOCK); web requests schedule `tmdo_ensure_group_indexes`, and doctor lists indexes not added yet +* Routed searches with post__not_in count from a cached base count minus the excluded posts (HivePress keyword + price search no longer slower than native) +* Rate-limited view requests sample their statistics (1 in 10) instead of writing an option each time +* Logger info / notice lines only with WP_DEBUG_LOG (filter `tmdo_log_info`) +* The public listings REST output withholds email, phone, address and IP fields even when declared public +* Admin form posts are handled before the page renders; uninstall.php globals are prefixed + = 1.2.0 = * `wp tmdo drift-check [--group] [--sample] [--fix]`: reports flat-vs-native drift per key (miss / diff / extra) and rebuilds drifted flat rows from native; native meta is never written, and aeav_only sites are refused * The post query router keeps a query native while one of its groups is recorded as drifting; a daily sample (500 entities per group) on the existing health-check event keeps the record current