feat(widgets/badges): author worn-badge + wear_medal alias

Show worn medal on author card; dual-read/write zibll wear_medal meta
and default to first owned badge when unset.
This commit is contained in:
2026-07-19 01:45:11 +08:00
parent 9643ce6d44
commit 379692d597
2 changed files with 40 additions and 1 deletions
+27 -1
View File
@@ -85,6 +85,28 @@ class WidgetAuthorCard extends \WP_Widget {
if ($bio !== '') {
echo '<div class="aksrt-author-card__bio">' . esc_html(wp_trim_words($bio, 28)) . '</div>';
}
$show_badge = !isset($instance['show_badge']) || !empty($instance['show_badge']);
if ($show_badge && class_exists('\AKSRT\User\Badges') && \AKSRT\User\Badges::public_display()) {
$wear = \AKSRT\User\Badges::get_wear($author_id);
if ($wear === '') {
// zibll alias fallback
$wear = sanitize_key((string) get_user_meta($author_id, 'wear_medal', true));
}
if ($wear !== '') {
$map = \AKSRT\User\Badges::get_dictionary_map();
if (isset($map[$wear])) {
$badge = $map[$wear];
echo '<div class="aksrt-author-card__badge tone-' . esc_attr((string) ($badge['tone'] ?? 'neutral')) . '">';
if (!empty($badge['icon_url'])) {
echo '<img src="' . esc_url((string) $badge['icon_url']) . '" alt="" width="16" height="16" loading="lazy" /> ';
} else {
echo '<i class="fas fa-medal" aria-hidden="true"></i> ';
}
echo esc_html((string) $badge['label']);
echo '</div>';
}
}
}
if ($show_stats) {
echo '<div class="aksrt-author-card__stats">';
echo '<span><b>' . esc_html((string) $post_count) . '</b>' . esc_html__('文章', 'aksrt') . '</span>';
@@ -122,7 +144,9 @@ class WidgetAuthorCard extends \WP_Widget {
</p>
<p>
<label><input type="checkbox" name="<?php echo esc_attr($this->get_field_name('show_img_bg')); ?>" value="1" <?php checked(!isset($instance['show_img_bg']) || !empty($instance['show_img_bg'])); ?>> <?php esc_html_e('显示封面', 'aksrt'); ?></label><br>
<label><input type="checkbox" name="<?php echo esc_attr($this->get_field_name('show_stats')); ?>" value="1" <?php checked(!isset($instance['show_stats']) || !empty($instance['show_stats'])); ?>> <?php esc_html_e('显示统计', 'aksrt'); ?></label>
<label><input type="checkbox" name="<?php echo esc_attr($this->get_field_name('show_stats')); ?>" value="1" <?php checked(!isset($instance['show_stats']) || !empty($instance['show_stats'])); ?>> <?php esc_html_e('显示统计', 'aksrt'); ?></label><br>
<label><input type="checkbox" name="<?php echo esc_attr($this->get_field_name('show_follow')); ?>" value="1" <?php checked(!isset($instance['show_follow']) || !empty($instance['show_follow'])); ?>> <?php esc_html_e('显示关注按钮', 'aksrt'); ?></label><br>
<label><input type="checkbox" name="<?php echo esc_attr($this->get_field_name('show_badge')); ?>" value="1" <?php checked(!isset($instance['show_badge']) || !empty($instance['show_badge'])); ?>> <?php esc_html_e('显示佩戴徽章', 'aksrt'); ?></label>
</p>
<?php
}
@@ -133,6 +157,8 @@ class WidgetAuthorCard extends \WP_Widget {
'user_id' => max(0, (int) ($new_instance['user_id'] ?? 0)),
'show_img_bg' => !empty($new_instance['show_img_bg']) ? 1 : 0,
'show_stats' => !empty($new_instance['show_stats']) ? 1 : 0,
'show_follow' => !empty($new_instance['show_follow']) ? 1 : 0,
'show_badge' => !empty($new_instance['show_badge']) ? 1 : 0,
];
}
}