fix(widgets): align mini paid badges with reference

This commit is contained in:
kate522 committed 2026-10-29 21:15:11 +08:00
1 parent fd034ff055
commit 985f18c750
8 files changed
+249 -31

No files matched your search

+48 -10
View File
@@ -97,6 +97,7 @@ if (!function_exists('aksrt_renderer_collect_post_data')) {
'post_type' => (string) get_post_type($post_id),
'is_sticky' => is_sticky($post_id),
'resource_badge' => (string) aksrt_resource_card_badge_text($post_id),
'pay_meta' => $pay_meta,
'pay_type' => sanitize_key((string) ($pay_meta['pay_type'] ?? 'no')),
'pay_limit' => (int) ($pay_meta['pay_limit'] ?? 0),
];
@@ -175,6 +176,9 @@ if (!function_exists('aksrt_renderer_mult_thumb')) {
if (!function_exists('aksrt_renderer_pay_badge')) {
function aksrt_renderer_pay_badge(array $data, bool $compact = false): string {
if ($compact) {
return aksrt_renderer_compact_pay_badge((array) ($data['pay_meta'] ?? []));
}
if ((string) $data['resource_badge'] === '') {
return '';
}
@@ -184,24 +188,58 @@ if (!function_exists('aksrt_renderer_pay_badge')) {
$type_labels = function_exists('aksrt_get_pay_types') ? aksrt_get_pay_types() : [];
$title = (string) ($type_labels[(string) ($data['pay_type'] ?? '')] ?? __('付费内容', 'aksrt'));
$icon = $is_vip ? aksrt_renderer_vip_icon($vip_level) : '';
if ($compact) {
return '<item class="meta-pay badg badg-sm mr6 ' . esc_attr($class) . '" data-toggle="tooltip" title="' . esc_attr($title) . '">' . $icon . esc_html((string) $data['resource_badge']) . '</item>';
}
$tooltip = $is_vip ? ' data-toggle="tooltip" title="' . esc_attr($title) . '"' : '';
return '<a rel="nofollow" href="' . esc_url((string) $data['permalink']) . '#posts-pay"' . $tooltip . ' class="meta-pay but ' . esc_attr($is_vip ? $class : 'jb-yellow') . '">' . $icon . esc_html((string) $data['resource_badge']) . '</a>';
}
}
if (!function_exists('aksrt_renderer_compact_pay_badge')) {
/** Compact article meta uses the published price and a type icon, not the large tag's text. */
function aksrt_renderer_compact_pay_badge(array $meta): string {
$types = [
'reading' => [__('付费阅读', 'aksrt'), 'fa fas fa-book'],
'download' => [__('付费资源', 'aksrt'), 'fa fas fa-download'],
'gallery' => [__('付费图片', 'aksrt'), 'fa far fa-file-image'],
'video' => [__('付费视频', 'aksrt'), 'fa fas fa-play-circle'],
];
$type = (string) ($meta['pay_type'] ?? 'no');
if (!isset($types[$type])) {
return '';
}
[$title, $type_icon] = $types[$type];
$points = ($meta['pay_modo'] ?? '0') === 'points';
$price = $points ? (string) max(0, (int) ($meta['points_price'] ?? 0)) : aksrt_format_price((string) ($meta['price'] ?? '0.00'));
$icon = aksrt_icon_markup($type_icon, 'mr3');
$class = 'c-yellow';
if ($price === '0') {
$title = str_replace(__('付费', 'aksrt'), __('免费', 'aksrt'), $title);
$label = esc_html__('免费', 'aksrt');
} else {
$level = max(0, min(2, (int) ($meta['pay_limit'] ?? 0)));
$vip = \AKSRT\Settings\Settings::get_payment_vip_settings();
if ($level > 0 && !empty($vip['enabled'])) {
$class = 'jb-vip' . $level;
$icon = aksrt_renderer_vip_icon($level);
$label = esc_html__('会员专属', 'aksrt');
} else {
$display = \AKSRT\Settings\Settings::get_paid_content_settings()['display'];
$mark = $points ? aksrt_icon_markup('zibsvg-points', 'points-mark') : esc_html((string) ($display['currency_symbol'] ?? '¥'));
$label = '<span class="em09">' . $mark . '</span>' . esc_html($price);
}
}
return '<item class="meta-pay badg badg-sm mr6 ' . esc_attr($class) . '" data-toggle="tooltip" title="' . esc_attr($title) . '">' . $icon . $label . '</item>';
}
}
if (!function_exists('aksrt_renderer_vip_icon')) {
function aksrt_renderer_vip_icon(int $level): string {
if (!class_exists('\AKSRT\Settings\Settings')) {
return '<i class="fa fas fa-certificate mr3" aria-hidden="true"></i>';
}
$settings = \AKSRT\Settings\Settings::get_payment_vip_settings();
$url = esc_url((string) ($settings['levels'][$level]['img_icon'] ?? ''));
return $url !== ''
? '<img class="mr3" src="' . $url . '" alt="" aria-hidden="true">'
: '<i class="fa fas fa-certificate mr3" aria-hidden="true"></i>';
$url = (string) ($settings['levels'][$level]['img_icon'] ?? '');
if ($url === '') {
$url = get_template_directory_uri() . '/assets/img/user/vip/vip-' . $level . '.svg';
}
$name = (string) ($settings['levels'][$level]['name'] ?? 'VIP');
return '<img' . aksrt_get_lazy_attr('lazy_other', $url, 'img-icon mr3') . ' data-toggle="tooltip" title="' . esc_attr($name) . '" alt="' . esc_attr($name) . '">';
}
}