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:
1 parent
4083613dbe
commit
dc6dbc05d8
11 files changed
+983
-349
No files matched your search
@@ -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}>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user