b96b041445
F3 detector(A v3.4.5):HivePress addon 不暴露任何 per-addon class/const,
它們是透過 add_filter('hivepress/v1/extensions') 註冊目錄,所以原本的
class_exists / defined 偵測永遠只認得 core → 反 EAV 覆蓋率卡在 1/13。
改以 get_option('active_plugins') 為第一級訊號(新增 active_plugin_files()),
version_for() 對 addon 改讀其主檔 Version: header。覆蓋率回到 7/13。
F2 interceptor:reviews / messages / memberships / requests 改繼承核心的
TMDO_Standard_Post_Interceptor,573 → 344 行。FIELD_MAP 由 private
提升為 public(late static binding 從基底讀取)。
bootstrap 的 require 迴圈加核心版本守衛:這 4 個檔案在舊核心下會於
parse 階段就 fatal,class_exists 守衛來不及。
F4 listing-stats:view 計數改用 Zone_Warm::increment() 原子遞增,
flush 改原子 UPDATE,消除 get()+set() 的 lost-update race。
F5:主檔補 TablePrefix header(打包終檢 §10 schema drift 主路徑)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TbG1keQQ7XBa7qMQY16KCY
77 lines
1.7 KiB
PHP
77 lines
1.7 KiB
PHP
<?php
|
|
/**
|
|
* Memberships interceptor for HivePress Membership posts.
|
|
*
|
|
* @package TMDO
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Memberships interceptor — intercepts HivePress Membership reads/writes.
|
|
*
|
|
* Operates on hpct_memberships table.
|
|
*/
|
|
class TMDO_Memberships_Interceptor extends TMDO_Standard_Post_Interceptor {
|
|
|
|
/**
|
|
* Module identifier.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected string $module = 'memberships';
|
|
|
|
/**
|
|
* Meta key → flat column mapping.
|
|
*/
|
|
public const FIELD_MAP = array(
|
|
'hp_plan' => 'plan_id',
|
|
'hp_user' => 'user_id',
|
|
'hp_price' => 'price',
|
|
'hp_order' => 'order_id',
|
|
'hp_start_date' => 'start_date',
|
|
'hp_end_date' => 'end_date',
|
|
);
|
|
|
|
/**
|
|
* Returns the WordPress post_type slug handled by this interceptor.
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function get_post_type(): string {
|
|
return 'hp_membership';
|
|
}
|
|
|
|
/**
|
|
* Returns the table key passed to TMDO_DB::table().
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function get_table_key(): string {
|
|
return 'hpct_memberships';
|
|
}
|
|
|
|
/**
|
|
* Builds the INSERT row for a newly created membership post.
|
|
*
|
|
* @param int $post_id Post ID.
|
|
* @param \WP_Post $post Post object.
|
|
* @param string $now Formatted datetime string.
|
|
* @return array{values: array, formats: array}
|
|
*/
|
|
protected function build_insert_data( int $post_id, \WP_Post $post, string $now ): array {
|
|
return array(
|
|
'values' => array(
|
|
'post_id' => $post_id,
|
|
'user_id' => (int) $post->post_author,
|
|
'status' => $post->post_status,
|
|
'created_at' => $now,
|
|
'updated_at' => $now,
|
|
),
|
|
'formats' => array( '%d', '%d', '%s', '%s', '%s' ),
|
|
);
|
|
}
|
|
}
|