fix: Schema Registry cold zone 註冊改為冪等(修復欄位重複累積)
Tests / PHP Lint (pull_request) Successful in 13s
Anti-EAV Lint + Quality Gate / anti-eav-lint (pull_request) Failing after 25s
Tests / Unit Tests (pull_request) Successful in 36s
Tests / PHPCS (pull_request) Successful in 30s
Tests / PHPStan (pull_request) Successful in 53s
Tests / Integration Tests (pull_request) Successful in 2m47s

三個 zone 索引的寫入方式並不一致:
- hot  -> hot_columns[post_type][column]  以 column 為 key,天生冪等
- warm -> warm_fields[meta_key]           以 meta_key 為 key,天生冪等
- cold -> cold_fields[post_type][]        append,無去重

而 wpdo_register_fields 本來就會被觸發多次:核心自身於 plugins_loaded:4
觸發,主檔另有 late-bind safety net 於 :30 再觸發一次(讓在 :6 之後才
bootstrap 的 AddOn 趕上);加上主外掛與其 AddOn 可能同時註冊同一批欄位。

實測影響:某站台 cold_fields['hp_vendor'] 累積到 35 筆但只有 9 個相異值,
每個 key 重複 4 次。修正後為 9 筆、零重複。

修法:cold 分支加入 in_array() 去重,使 register() 對同一
(post_type, meta_key) 成為冪等操作,與 hot / warm 既有行為一致。

驗證:核心單元測試 587 tests / 1156 assertions 全綠;
wp wpdo doctor 於兩個站台皆 0 FAIL。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-08 14:27:15 +08:00
parent c5027b0fce
commit 9f587c39dc
3 changed files with 44 additions and 3 deletions
+10 -1
View File
@@ -145,7 +145,16 @@ class TMDO_Schema_Registry {
break;
case 'cold':
$this->cold_fields[ $config['post_type'] ][] = $config['meta_key'];
// 去重:hot 以 column 為 key、warm 以 meta_key 為 key,兩者天生冪等;
// 唯獨 cold 是 append,重複註冊會無限膨脹。而 `wpdo_register_fields`
// 本來就會被 fire 多次(core plugins_loaded:4 + late-bind safety net :30),
// 加上主外掛與 AddOn 可能同時註冊同一批欄位,實測曾出現同一 key 重複 4 次。
if ( ! isset( $this->cold_fields[ $config['post_type'] ] ) ) {
$this->cold_fields[ $config['post_type'] ] = array();
}
if ( ! in_array( $config['meta_key'], $this->cold_fields[ $config['post_type'] ], true ) ) {
$this->cold_fields[ $config['post_type'] ][] = $config['meta_key'];
}
break;
}
}