feat(admin): quick-edit paid post settings in a dialog on the pay products page

- Rebuild aksrt_pay_products as list + in-page quick settings dialog
  (pay type, limit, cash/points prices, sales float, coupon, order expiry, copy)
- Query by _aksrt_pay_type with real pagination; drop order-summary fallback
  and the duplicate "Meta 销量" column
- Centralize pay meta writes in DomainModel::persist_pay_meta(); stop writing
  unread _aksrt_pay_modo / _aksrt_pay_limit keys

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Fable 5 committed 2026-10-31 17:28:45 +08:00
1 parent 4083613dbe
commit dc6dbc05d8
11 files changed
+983 -349

No files matched your search

+15
View File
@@ -226,6 +226,21 @@ class DomainModel {
return self::normalize_pay_type($pay_type) === self::PAY_TYPE_DOWNLOAD;
}
/**
* 付费 meta 的唯一写入口:清洗后写入主 bag,并同步可查询的派生键(类型 / 价格 / 资源标记)。
*
* @param array<string, mixed> $meta
* @return array<string, mixed> 实际写入的清洗结果。
*/
public static function persist_pay_meta(int $post_id, array $meta): array {
$meta = self::sanitize_pay_meta($meta);
update_post_meta($post_id, self::PAY_META_KEY, $meta);
update_post_meta($post_id, self::PAY_TYPE_KEY, (string) $meta['pay_type']);
update_post_meta($post_id, self::PAY_PRICE_KEY, $meta['pay_modo'] === 'points' ? (int) $meta['points_price'] : (string) $meta['price']);
update_post_meta($post_id, self::RESOURCE_MARKER_KEY, self::is_resource_pay_type((string) $meta['pay_type']) ? 1 : 0);
return $meta;
}
/**
* @param mixed $value
* @return array<int, array{label:string,url:string,type:string,extract_code:string,copy_key:string,copy_val:string,icon:string,class:string,attachment_id:int}>
+1 -15
View File
@@ -205,20 +205,6 @@ trait FrontSubmitPay {
* @param array<string, mixed> $meta
*/
private function write_pay_meta(int $post_id, array $meta): void {
$meta = DomainModel::sanitize_pay_meta($meta);
update_post_meta($post_id, DomainModel::PAY_META_KEY, $meta);
update_post_meta($post_id, DomainModel::PAY_TYPE_KEY, (string) ($meta['pay_type'] ?? DomainModel::PAY_TYPE_NO));
update_post_meta(
$post_id,
DomainModel::PAY_PRICE_KEY,
($meta['pay_modo'] ?? '0') === 'points'
? (int) ($meta['points_price'] ?? 0)
: (string) ($meta['price'] ?? '0.00')
);
update_post_meta(
$post_id,
DomainModel::RESOURCE_MARKER_KEY,
DomainModel::is_resource_pay_type((string) ($meta['pay_type'] ?? 'no')) ? 1 : 0
);
DomainModel::persist_pay_meta($post_id, $meta);
}
}
+1 -8
View File
@@ -313,7 +313,7 @@ class ResourceMetaBox {
}
}
$meta = DomainModel::sanitize_pay_meta([
DomainModel::persist_pay_meta($post_id, [
'pay_type' => $raw['pay_type'] ?? 'no',
'pay_limit' => $raw['pay_limit'] ?? 0,
'pay_modo' => $raw['pay_modo'] ?? '0',
@@ -343,12 +343,5 @@ class ResourceMetaBox {
'pay_details' => (string) ($raw['pay_details'] ?? ''),
'pay_extra_hide' => (string) ($raw['pay_extra_hide'] ?? ''),
]);
update_post_meta($post_id, DomainModel::PAY_META_KEY, $meta);
update_post_meta($post_id, DomainModel::PAY_TYPE_KEY, (string) $meta['pay_type']);
update_post_meta($post_id, DomainModel::PAY_PRICE_KEY, $meta['pay_modo'] === 'points' ? (int) $meta['points_price'] : (string) $meta['price']);
update_post_meta($post_id, '_aksrt_pay_modo', (string) $meta['pay_modo']);
update_post_meta($post_id, '_aksrt_pay_limit', (int) $meta['pay_limit']);
update_post_meta($post_id, DomainModel::RESOURCE_MARKER_KEY, DomainModel::is_resource_pay_type((string) $meta['pay_type']) ? 1 : 0);
}
}