' . esc_html__('请先登录后再开通会员。', 'aksrt') . ''; } $vip = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_payment_vip_settings() : ['enabled' => false]; if (empty($vip['enabled'])) { return '
' . esc_html__('会员功能未启用。', 'aksrt') . '
'; } $catalog = $this->get_catalog($user_id); $user_level = (int) ($catalog['user_level'] ?? 0); $prefer_level = max(1, min(2, $prefer_level)); if ($user_level > 0) { return $this->render_modal_viped($user_id, $catalog, $vip, $prefer_level); } return $this->render_modal_pay($user_id, $catalog, $vip, $prefer_level); } /** * Mini hover card for header (zibll zibpay_get_vip_card). */ public function render_vip_card(int $level, int $user_id = 0): string { $level = max(1, min(2, $level)); $vip = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_payment_vip_settings() : []; $levels = is_array($vip['levels'] ?? null) ? $vip['levels'] : []; if (empty($levels[$level]['enabled'])) { return ''; } $name = (string) ($levels[$level]['name'] ?? ('VIP' . $level)); $desc = (string) ($levels[$level]['desc'] ?? ''); $equity = (string) ($levels[$level]['equity'] ?? ''); $cls = $user_id > 0 ? ' pay-vip' : ' signin-loader'; // Preserve admin equity HTML as-is (sanitize/wrap only; never re-split). $equity_html = function_exists('aksrt_format_vip_equity_html') ? aksrt_format_vip_equity_html($equity, 'mb10 relative') : ''; $icon = ''; $html = '
'; $html .= ''; $html .= '
' . $icon . '
'; $html .= '
'; $html .= '
' . $icon . '' . esc_html($name) . '
'; if ($desc !== '') { $html .= '
' . esc_html($desc) . '
'; } $html .= $equity_html; $html .= '' . esc_html(sprintf(__('开通%s', 'aksrt'), $name)) . ''; $html .= '
'; return $html; } private function render_modal_pay(int $user_id, array $catalog, array $vip, int $prefer_level): string { $user = get_userdata($user_id); $name = $user ? $user->display_name : ''; $avatar = get_avatar($user_id, 42); $desc = (string) ($vip['desc'] ?? $catalog['desc'] ?? ''); $more = (string) ($vip['more'] ?? ''); $groups = is_array($catalog['level_packages'] ?? null) ? $catalog['level_packages'] : []; $methods = is_array($catalog['payment_methods'] ?? null) ? $catalog['payment_methods'] : []; $levels = is_array($vip['levels'] ?? null) ? $vip['levels'] : []; $active_lv = !empty($levels[$prefer_level]['enabled']) ? $prefer_level : 0; if ($active_lv <= 0) { foreach ([1, 2] as $lv) { if (!empty($levels[$lv]['enabled'])) { $active_lv = $lv; break; } } } $tabs = ''; $panes = ''; foreach ([1, 2] as $lv) { if (empty($levels[$lv]['enabled'])) { continue; } $is_active = ($lv === $active_lv); $lv_name = (string) ($levels[$lv]['name'] ?? ('VIP' . $lv)); $tabs .= '
  • ' . '' . esc_html($lv_name) . '
  • '; $group_items = []; foreach ($groups as $g) { if ((int) ($g['level'] ?? 0) === $lv) { $group_items = is_array($g['items'] ?? null) ? $g['items'] : []; break; } } $products = $this->render_product_radios($group_items); $equity = (string) ($levels[$lv]['equity'] ?? ''); $lv_desc = (string) ($levels[$lv]['desc'] ?? ''); $panes .= '
    '; $panes .= '
    '; $panes .= '
    '; $panes .= '
    ' . esc_html($lv_name) . '
    '; if ($lv_desc !== '') { $panes .= '
    ' . esc_html($lv_desc) . '
    '; } if ($equity !== '') { $panes .= function_exists('aksrt_format_vip_equity_html') ? aksrt_format_vip_equity_html($equity) : '
    ' . wp_kses_post($equity) . '
    '; } $panes .= '
    '; $panes .= $products; $panes .= $this->render_pay_methods($methods); $panes .= ''; $panes .= '

    '; $panes .= '
    '; } $points = ''; if (!empty($catalog['points_exchange']['enabled']) && !empty($catalog['points_exchange']['packages'])) { $points = '
    ' . esc_html__('积分兑换会员', 'aksrt') . '
    '; } $html = '
    '; $html .= ''; $html .= ''; $html .= ''; $html .= '
    ' . $panes . '
    '; if ($more !== '') { $html .= '
    ' . $more . '
    '; } $html .= $points; $html .= '
    '; return $html; } /** * @param array $catalog * @param array $vip */ private function render_modal_viped(int $user_id, array $catalog, array $vip, int $prefer_level): string { $user = get_userdata($user_id); $name = $user ? $user->display_name : ''; $avatar = get_avatar($user_id, 42); $exp_label = (string) ($catalog['user_expires_label'] ?? ''); $groups = is_array($catalog['level_packages'] ?? null) ? $catalog['level_packages'] : []; $methods = is_array($catalog['payment_methods'] ?? null) ? $catalog['payment_methods'] : []; $levels = is_array($vip['levels'] ?? null) ? $vip['levels'] : []; $more = (string) ($vip['more'] ?? ''); $tabs = ''; $panes = ''; $active_set = false; foreach ($groups as $g) { $lv = (int) ($g['level'] ?? 0); $action = (string) ($g['action'] ?? 'renew'); $items = is_array($g['items'] ?? null) ? $g['items'] : []; if ($lv <= 0 || $items === []) { continue; } $is_active = !$active_set; if ($is_active) { $active_set = true; } $lv_name = (string) ($g['name'] ?? ($levels[$lv]['name'] ?? ('VIP' . $lv))); $badge = $action === 'upgrade' ? __('升级', 'aksrt') : __('续费', 'aksrt'); $tab_id = 'tab-payvip-' . $lv . '-' . $action; $tabs .= '
  • ' . '' . esc_html($badge . $lv_name) . '
  • '; $products = $this->render_product_radios($items); $equity = (string) ($levels[$lv]['equity'] ?? ''); $panes .= '
    '; $panes .= '
    '; $panes .= '
    '; $panes .= '
    ' . esc_html($lv_name) . '
    '; if ($equity !== '') { $panes .= function_exists('aksrt_format_vip_equity_html') ? aksrt_format_vip_equity_html($equity) : '
    ' . wp_kses_post($equity) . '
    '; } $panes .= '
    '; $panes .= $products; $panes .= $this->render_pay_methods($methods); $cta = $action === 'upgrade' ? __('立即升级', 'aksrt') : __('立即续费', 'aksrt'); $panes .= ''; $panes .= '

    '; $panes .= '
    '; } if ($tabs === '') { return '
    ' . esc_html__('当前没有可续费或升级的套餐。', 'aksrt') . '
    '; } $html = '
    '; $html .= ''; $html .= '
    • ' . $avatar . '
    • '; $html .= '
    • ' . esc_html($name) . ''; $html .= '
      ' . esc_html($exp_label) . '
    '; $html .= ''; $html .= '
    ' . $panes . '
    '; if ($more !== '') { $html .= '
    ' . $more . '
    '; } $html .= '
    '; return $html; } /** * @param array> $items */ private function render_product_radios(array $items): string { if ($items === []) { return '
    ' . esc_html__('暂无可用套餐', 'aksrt') . '
    '; } $html = '
    '; $i = 0; foreach ($items as $item) { $pid = (int) ($item['package_id'] ?? 0); if ($pid <= 0) { continue; } $i++; $price = (string) ($item['price_label'] ?? ''); $show = (string) ($item['show_price_label'] ?? ''); $tag = (string) ($item['discount_tag'] ?? ''); $time = (string) ($item['days_label'] ?? ''); $title = (string) ($item['title'] ?? ''); $checked = $i === 1 ? ' checked' : ''; $html .= ''; } $html .= '
    '; return $html; } /** * @param array $methods */ private function render_pay_methods(array $methods): string { if ($methods === []) { return ''; } if (count($methods) === 1) { $id = (string) ($methods[0]['id'] ?? 'balance'); return ''; } $html = '
    '; $html .= '' . esc_html__('支付方式', 'aksrt') . ''; foreach ($methods as $i => $m) { $mid = (string) ($m['id'] ?? ''); $mname = (string) ($m['name'] ?? $mid); $html .= ''; } $html .= '
    '; return $html; } }