$label) : ?>
>
0 = 用户需支付对应积分。', 'aksrt'); ?>
>
>
0 表示限量,售完即止。', 'aksrt'); ?>
>
post_type !== 'post') return; if (empty($_POST['aksrt_pay_meta_nonce']) || !wp_verify_nonce((string) $_POST['aksrt_pay_meta_nonce'], 'aksrt_pay_meta_save')) { return; } if (!current_user_can('edit_post', $post_id)) return; // 付费类型 $allowed_types = array_keys(aksrt_get_pay_types()); $pay_type = sanitize_key((string) ($_POST['aksrt_pay_type'] ?? 'no')); if (!in_array($pay_type, $allowed_types, true)) { $pay_type = 'no'; } // 价格字段 $price = max(0, (float) ($_POST['aksrt_pay_price'] ?? 0)); $original_price = max(0, (float) ($_POST['aksrt_pay_original_price'] ?? 0)); $vip1_price = max(0, (float) ($_POST['aksrt_pay_vip1_price'] ?? 0)); $vip2_price = max(0, (float) ($_POST['aksrt_pay_vip2_price'] ?? 0)); // 资源信息 $version = sanitize_text_field((string) ($_POST['aksrt_pay_version'] ?? '')); $size = sanitize_text_field((string) ($_POST['aksrt_pay_size'] ?? '')); $compat = sanitize_text_field((string) ($_POST['aksrt_pay_compat'] ?? '')); $license = sanitize_text_field((string) ($_POST['aksrt_pay_license'] ?? '')); $demo_url = esc_url_raw((string) ($_POST['aksrt_pay_demo_url'] ?? '')); $video_url = esc_url_raw((string) ($_POST['aksrt_pay_video_url'] ?? '')); // 布尔字段 $require_login = !empty($_POST['aksrt_pay_require_login']); $require_captcha = !empty($_POST['aksrt_pay_require_captcha']); // JSON 字段 $downloads = $this->parse_json_array($_POST['aksrt_pay_downloads'] ?? ''); $attributes = $this->parse_json_array($_POST['aksrt_pay_attributes'] ?? ''); $gallery = $this->parse_json_array($_POST['aksrt_pay_gallery'] ?? ''); // 清洗下载源 if ($downloads !== null && class_exists('AKSRT_Setup') && method_exists('AKSRT_Setup', 'sanitize_downloads_meta')) { $downloads = AKSRT_Setup::sanitize_downloads_meta($downloads); } // 保存统一元数据 $pay_meta = AKSRT_Domain_Model::sanitize_pay_meta([ 'pay_type' => $pay_type, 'price' => $price, 'original_price' => $original_price, 'vip1_price' => $vip1_price, 'vip2_price' => $vip2_price, 'version' => $version, 'size' => $size, 'compat' => $compat, 'license' => $license, 'demo_url' => $demo_url, 'video_url' => $video_url, 'downloads' => $downloads ?? [], 'attributes' => $attributes ?? [], 'gallery' => $gallery ?? [], 'require_login' => $require_login, 'require_captcha' => $require_captcha, // §3.8 电商增强字段 'virtual_sales' => $_POST['aksrt_pay_virtual_sales'] ?? 0, 'stock' => $_POST['aksrt_pay_stock'] ?? -1, 'purchase_limit' => $_POST['aksrt_pay_purchase_limit'] ?? 0, 'card_keys' => isset($_POST['aksrt_pay_card_keys']) ? array_filter(array_map('trim', explode("\n", (string) $_POST['aksrt_pay_card_keys']))) : [], 'free_preview' => $_POST['aksrt_pay_free_preview'] ?? '', 'show_sales' => !empty($_POST['aksrt_pay_show_sales']), ]); update_post_meta($post_id, AKSRT_Domain_Model::PAY_META_KEY, $pay_meta); // 同步标量字段用于查询(模仿 zibll 的 zibpay_type 同步) update_post_meta($post_id, AKSRT_Domain_Model::PAY_TYPE_KEY, (string) $pay_meta['pay_type']); update_post_meta($post_id, AKSRT_Domain_Model::PAY_PRICE_KEY, (float) $pay_meta['price']); // 清理旧的 _aksrt_is_resource 标记 update_post_meta( $post_id, AKSRT_Domain_Model::RESOURCE_MARKER_KEY, AKSRT_Domain_Model::is_resource_pay_type((string) $pay_meta['pay_type']) ? 1 : 0 ); } /** * 安全解析 JSON 数组。 */ private function parse_json_array(string $raw): ?array { $raw = trim($raw); if ($raw === '') return []; $decoded = json_decode($raw, true); return is_array($decoded) ? $decoded : null; } }