feat: 收口 1:1 剩余欠账(论坛壳/圈子/501/私信默认/资源死码)

- 论坛 board/topic/plate/tag/plate-cat 接入 content-wrap/content-layout 主站流壳
- 公共主页 plate 圈子 tab 接关注/管理版块真实数据并计数
- forum-topic 渲染封面/付费扩展位 meta(§7.3)
- 后台删除消息/背景图/评论图 REST 从 501 补齐为真实实现
- 私信 private_s 缺省 true(完整 1:1,不再兼容默认关)
- 清理 aksrt_get_resource_meta 不可达旧实现;挂载 AKSRT_AI 配置门控实例
- 登录 modal 启用 colorful-header;订单页粉边 focus 软化;侧栏次级入口视觉弱化

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Fable 5 committed 2026-07-12 13:06:47 +08:00
1 parent 0941c7d23f
commit fb68b3f8c6
16 files changed
+313 -82

No files matched your search

+19 -54
View File
@@ -36,37 +36,12 @@ if (!function_exists('aksrt_get_resource_meta')) {
$resource_view_count = (int) get_post_meta($p->ID, AKSRT_Domain_Model::RESOURCE_VIEW_COUNT_KEY, true);
$common_view_count = (int) get_post_meta($p->ID, AKSRT_Domain_Model::POST_VIEW_COUNT_KEY, true);
return [
'version' => (string) ($pay_meta['version'] ?? ''),
'size' => (string) ($pay_meta['size'] ?? ''),
'price' => (float) ($pay_meta['price'] ?? 0),
'original_price' => (float) ($pay_meta['original_price'] ?? 0),
'vip1_price' => (float) ($pay_meta['vip1_price'] ?? 0),
'vip2_price' => (float) ($pay_meta['vip2_price'] ?? 0),
'pay_type' => (string) ($pay_meta['pay_type'] ?? AKSRT_Domain_Model::PAY_TYPE_DOWNLOAD),
'license' => (string) ($pay_meta['license'] ?? ''),
'compat' => (string) ($pay_meta['compat'] ?? ''),
'demo_url' => (string) ($pay_meta['demo_url'] ?? ''),
'downloads' => array_values(is_array($pay_meta['downloads'] ?? null) ? $pay_meta['downloads'] : []),
'download_count' => max(0, max($download_count, $legacy_download_count)),
'view_count' => max(0, max($resource_view_count, $common_view_count)),
'require_login' => !empty($pay_meta['require_login']),
'require_captcha' => !empty($pay_meta['require_captcha']),
];
// 一次取出全部 post meta(WP 已缓存到 object cache)
$all = get_post_meta($p->ID);
if (!is_array($all)) $all = [];
$get = static function ($key) use ($all) {
if (!isset($all[$key]) || !is_array($all[$key]) || empty($all[$key])) return null;
return maybe_unserialize($all[$key][0]);
};
$downloads = $get('_aksrt_res_downloads');
if (!is_array($downloads)) $downloads = [];
// Normalize downloads extract_code aliases for legacy rows still stored on pay meta.
$downloads = array_values(is_array($pay_meta['downloads'] ?? null) ? $pay_meta['downloads'] : []);
$downloads = array_values(array_filter(array_map(static function ($row) {
if (!is_array($row)) return null;
if (!is_array($row)) {
return null;
}
$extract_keys = [
'extract_code', 'extractCode', 'extract', 'extract_key',
'extraction_code', 'extractionCode',
@@ -85,33 +60,23 @@ if (!function_exists('aksrt_get_resource_meta')) {
$row['extract_code'] = isset($row['extract_code']) ? trim((string) $row['extract_code']) : '';
return $row;
}, $downloads)));
$resource_download_count = (int) ($get('_aksrt_res_download_count') ?? 0);
$legacy_download_count = (int) ($get('download_count') ?? 0);
$resource_view_count = (int) ($get('_aksrt_res_view_count') ?? 0);
$common_view_count = (int) ($get('aksrt_post_views') ?? 0);
$allowed_pay_types = ['download', 'reading', 'gallery', 'video', 'vip'];
$pay_type = (string) ($get('_aksrt_res_pay_type') ?? 'download');
if (!in_array($pay_type, $allowed_pay_types, true)) {
$pay_type = 'download';
}
return [
'version' => (string) ($get('_aksrt_res_version') ?? ''),
'size' => (string) ($get('_aksrt_res_size') ?? ''),
'price' => (float) ($get('_aksrt_res_price') ?? 0),
'original_price' => (float) ($get('_aksrt_res_original_price') ?? 0),
'vip1_price' => (float) ($get('_aksrt_res_vip1_price') ?? 0),
'vip2_price' => (float) ($get('_aksrt_res_vip2_price') ?? 0),
'pay_type' => $pay_type,
'license' => (string) ($get('_aksrt_res_license') ?? ''),
'compat' => (string) ($get('_aksrt_res_compat') ?? ''),
'demo_url' => (string) ($get('_aksrt_res_demo_url') ?? ''),
'downloads' => array_values($downloads),
'download_count' => max(0, max($resource_download_count, $legacy_download_count)),
'version' => (string) ($pay_meta['version'] ?? ''),
'size' => (string) ($pay_meta['size'] ?? ''),
'price' => (float) ($pay_meta['price'] ?? 0),
'original_price' => (float) ($pay_meta['original_price'] ?? 0),
'vip1_price' => (float) ($pay_meta['vip1_price'] ?? 0),
'vip2_price' => (float) ($pay_meta['vip2_price'] ?? 0),
'pay_type' => (string) ($pay_meta['pay_type'] ?? AKSRT_Domain_Model::PAY_TYPE_DOWNLOAD),
'license' => (string) ($pay_meta['license'] ?? ''),
'compat' => (string) ($pay_meta['compat'] ?? ''),
'demo_url' => (string) ($pay_meta['demo_url'] ?? ''),
'downloads' => $downloads,
'download_count' => max(0, max($download_count, $legacy_download_count)),
'view_count' => max(0, max($resource_view_count, $common_view_count)),
'require_login' => (bool) ($get('_aksrt_res_require_login') ?? false),
'require_captcha' => (bool) ($get('_aksrt_res_require_captcha') ?? false),
'require_login' => !empty($pay_meta['require_login']),
'require_captcha' => !empty($pay_meta['require_captcha']),
];
}
}