fix(vip): Batch 0 wiring for VIP settings, URLs, and order meta

Wire get_vip_settings alias, tab aliases for vip/assets, expired-level meta,
VIP2 order-level fallback, JSON-safe order notes, and header/float pay-vip CTAs.
This commit is contained in:
2026-07-21 16:16:43 +08:00
parent 01719b7fa1
commit 69836154fd
9 changed files with 122 additions and 71 deletions
+13 -1
View File
@@ -29,6 +29,18 @@ trait OrderRepositoryCore {
$order_number = $data['order_number'] ?? $this->generate_order_number();
// Preserve JSON pay meta (VIP/content/coupon). Only strip tags for plain text notes.
$note_raw = (string) ($data['note'] ?? '');
$note_trim = trim($note_raw);
if ($note_trim !== '' && ($note_trim[0] === '{' || $note_trim[0] === '[')) {
$decoded = json_decode($note_trim, true);
$note = is_array($decoded)
? (string) wp_json_encode($decoded, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)
: sanitize_textarea_field($note_raw);
} else {
$note = sanitize_textarea_field($note_raw);
}
$wpdb->insert($this->table(), [
'order_number' => $order_number,
'user_id' => (int) ($data['user_id'] ?? 0),
@@ -42,7 +54,7 @@ trait OrderRepositoryCore {
'created_at' => $data['created_at'] ?? current_time('mysql'),
'paid_at' => $data['paid_at'] ?? null,
'expires_at' => $data['expires_at'] ?? null,
'note' => sanitize_textarea_field((string) ($data['note'] ?? '')),
'note' => $note,
], ['%s', '%d', '%s', '%d', '%f', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s']);
if ($wpdb->insert_id) {
@@ -159,6 +159,15 @@ trait CreditsPaymentGroups {
return PaymentRuntime::get_payment_vip_settings();
}
/**
* Alias for callers that expect get_vip_settings() (header CTA, float buttons).
*
* @return array<string,mixed>
*/
public static function get_vip_settings(): array {
return self::get_payment_vip_settings();
}
/**
* @return array{enabled:bool,share_ratio:int,settlement_threshold:int,cycle_days:int,note:string}
*/
+2 -1
View File
@@ -192,7 +192,8 @@ class PaymentRuntime {
'upgrade' => [
'enabled' => !isset($settings['vip_upgrade']) || !empty($settings['vip_upgrade']),
'desc' => sanitize_textarea_field((string) ($settings['vip_upgrade_desc'] ?? '')),
'product' => sanitize_text_field((string) ($settings['vip_upgrade_product'] ?? '')),
// Multi-line upgrade product rules — must not collapse newlines.
'product' => sanitize_textarea_field((string) ($settings['vip_upgrade_product'] ?? '')),
],
'points_exchange' => [
'enabled' => !empty($settings['pay_vip_points_exchange_s']),