feat(user): badge icon urls and wear medal chrome
Extend badge dictionary with optional icon_url, prefer aksrt_wear_badge when assigned, and render medal images in identity chips.
This commit is contained in:
1 parent
a3585b0f96
commit
1d75170f8e
7 files changed
+99
-21
No files matched your search
@@ -9,7 +9,7 @@ defined('ABSPATH') || exit;
|
||||
|
||||
if (!function_exists('aksrt_get_user_identity_signals')) {
|
||||
/**
|
||||
* @return list<array{type:string,label:string,icon:string,tone:string,title?:string}>
|
||||
* @return list<array{type?:string,label:string,icon:string,tone:string,title?:string,icon_url?:string,slug?:string,wear?:bool}>
|
||||
*/
|
||||
function aksrt_get_user_identity_signals(int $user_id): array {
|
||||
if ($user_id <= 0) {
|
||||
@@ -27,6 +27,8 @@ if (!function_exists('aksrt_render_user_identity_chips')) {
|
||||
/**
|
||||
* Render compact identity chips (verify / level / badges).
|
||||
*
|
||||
* Badge signals with icon_url render as Zibll-like medal images.
|
||||
*
|
||||
* @param int $user_id
|
||||
* @param string $context author|comment|card
|
||||
*/
|
||||
@@ -42,8 +44,9 @@ if (!function_exists('aksrt_render_user_identity_chips')) {
|
||||
}
|
||||
}
|
||||
$signals = aksrt_get_user_identity_signals($user_id);
|
||||
$limit = $context === 'comment' ? 3 : 6;
|
||||
$n = 0;
|
||||
// Comments stay compact; author/card can show more.
|
||||
$limit = $context === 'comment' ? 3 : 6;
|
||||
$n = 0;
|
||||
foreach ($signals as $signal) {
|
||||
if ($n >= $limit) {
|
||||
break;
|
||||
@@ -52,14 +55,32 @@ if (!function_exists('aksrt_render_user_identity_chips')) {
|
||||
if ($label === '') {
|
||||
continue;
|
||||
}
|
||||
$tone = sanitize_html_class((string) ($signal['tone'] ?? 'info'));
|
||||
$icon = sanitize_html_class((string) ($signal['icon'] ?? 'check'));
|
||||
$tone = sanitize_html_class((string) ($signal['tone'] ?? 'info'));
|
||||
$icon = sanitize_html_class((string) ($signal['icon'] ?? 'check'));
|
||||
$icon_url = esc_url((string) ($signal['icon_url'] ?? ''));
|
||||
$title = (string) ($signal['title'] ?? $label);
|
||||
$is_wear = !empty($signal['wear']);
|
||||
$type = sanitize_html_class((string) ($signal['type'] ?? ''));
|
||||
|
||||
// Image medal when dictionary provides icon_url.
|
||||
if ($icon_url !== '') {
|
||||
$classes = 'medal-icon img-icon ml3 aksrt-identity-medal aksrt-identity-medal--' . $context;
|
||||
if ($is_wear) {
|
||||
$classes .= ' is-wear';
|
||||
}
|
||||
if ($type !== '') {
|
||||
$classes .= ' aksrt-identity-medal--' . $type;
|
||||
}
|
||||
$html .= '<img class="' . esc_attr($classes) . '" src="' . $icon_url . '" alt="' . esc_attr($label) . '" title="' . esc_attr($title) . '" loading="lazy" decoding="async" />';
|
||||
$n++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Font Awesome: map short names to fa-* if needed.
|
||||
if ($icon !== '' && !str_contains($icon, 'fa-')) {
|
||||
$icon = 'fa-' . $icon;
|
||||
}
|
||||
$title = (string) ($signal['title'] ?? $label);
|
||||
$html .= '<span class="badg badg-sm ml3 aksrt-identity-chip aksrt-identity-chip--' . esc_attr($tone) . ' aksrt-identity-chip--' . esc_attr($context) . '" title="' . esc_attr($title) . '">';
|
||||
$html .= '<span class="badg badg-sm ml3 aksrt-identity-chip aksrt-identity-chip--' . esc_attr($tone) . ' aksrt-identity-chip--' . esc_attr($context) . ($is_wear ? ' is-wear' : '') . '" title="' . esc_attr($title) . '">';
|
||||
if ($icon !== '') {
|
||||
$html .= '<i class="fa ' . esc_attr($icon) . '" aria-hidden="true"></i> ';
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user