esc_html__('在文章/帖子侧栏显示当前内容作者信息与更多文章。', 'aksrt'), 'classname' => 'widget_aksrt_author_card', ] ); } public function widget($args, $instance): void { $author_id = 0; if (is_singular()) { $post = get_queried_object(); if ($post instanceof \WP_Post) { $author_id = (int) $post->post_author; } } if ($author_id <= 0 && !empty($instance['user_id'])) { $author_id = (int) $instance['user_id']; } if ($author_id <= 0) { return; } $user = get_userdata($author_id); if (!$user) { return; } $show_bg = !isset($instance['show_img_bg']) || !empty($instance['show_img_bg']); $show_stats = !isset($instance['show_stats']) || !empty($instance['show_stats']); $show_posts = !isset($instance['show_posts']) || !empty($instance['show_posts']); $post_style = sanitize_key((string) ($instance['post_style'] ?? 'mini')); if (!in_array($post_style, ['card', 'mini'], true)) { // Legacy show_img checkbox from zibll. if (isset($instance['show_img'])) { $post_style = !empty($instance['show_img']) ? 'card' : 'mini'; } else { $post_style = 'mini'; } } $limit = max(0, min(12, (int) ($instance['limit'] ?? 6))); $orderby = sanitize_key((string) ($instance['orderby'] ?? 'date')); $avatar = function_exists('aksrt_get_avatar_url') ? aksrt_get_avatar_url($author_id, ['size' => 120]) : get_avatar_url($author_id, ['size' => 120]); $home = function_exists('aksrt_get_user_home_url') ? aksrt_get_user_home_url($author_id) : get_author_posts_url($author_id); $bio = get_user_meta($author_id, 'description', true); if (!is_string($bio) || $bio === '') { $bio = (string) $user->description; } $cover = (string) get_user_meta($author_id, 'aksrt_cover', true); if ($cover === '') { $cover = (string) get_user_meta($author_id, 'custom_avatar_cover', true); } $post_count = count_user_posts($author_id, 'post', true); $topic_count = post_type_exists('aksrt_forum_topic') ? count_user_posts($author_id, 'aksrt_forum_topic', true) : 0; $followers = 0; if (class_exists('\AKSRT\User\Follow')) { $followers = \AKSRT\User\Follow::get_instance()->get_follower_count($author_id); } $name_html = function_exists('aksrt_get_user_name') ? aksrt_get_user_name(['id' => $author_id, 'follow' => false, 'class' => 'flex ac jc']) : '' . esc_html($user->display_name) . ''; echo $args['before_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped $title = apply_filters('widget_title', (string) ($instance['title'] ?? ''), $instance, $this->id_base); if ($title !== '') { echo $args['before_title'] . esc_html($title) . $args['after_title']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } echo '
'; if ($show_bg) { $bg = $cover !== '' ? ' style="background-image:url(' . esc_url($cover) . ')"' : ''; echo '
'; } echo '
'; echo '
'; $ph = get_template_directory_uri() . '/assets/img/placeholder.svg'; echo ''; echo '
' . $name_html . '
'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped if ($bio !== '') { echo '
' . esc_html(wp_trim_words($bio, 28)) . '
'; } $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 === '') { $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 '
'; if (!empty($badge['icon_url'])) { echo ' '; } else { echo ' '; } echo esc_html((string) $badge['label']); echo '
'; } } } if ($show_stats) { echo '
'; echo '' . esc_html((string) $post_count) . '' . esc_html__('文章', 'aksrt') . ''; if ($topic_count > 0) { echo '' . esc_html((string) $topic_count) . '' . esc_html__('帖子', 'aksrt') . ''; } echo '' . esc_html((string) $followers) . '' . esc_html__('粉丝', 'aksrt') . ''; echo '
'; } $cuid = get_current_user_id(); $show_follow = !isset($instance['show_follow']) || !empty($instance['show_follow']); echo '
'; if ($show_follow && $cuid > 0 && $cuid !== $author_id && class_exists('\AKSRT\User\Follow')) { $following = \AKSRT\User\Follow::get_instance()->is_following($cuid, $author_id); $label = $following ? __('已关注', 'aksrt') : __('关注', 'aksrt'); echo ''; } echo '' . esc_html__('查看主页', 'aksrt') . ''; echo '
'; echo '
'; // .user-content if ($show_posts && $limit > 0 && function_exists('aksrt_render_user_card_posts')) { echo aksrt_render_user_card_posts([ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 'user_id' => $author_id, 'limit' => $limit, 'orderby' => $orderby, 'post_style' => $post_style, 'post_type' => 'post', 'show_empty' => true, ]); } echo '
'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } public function form($instance): void { $post_style = sanitize_key((string) ($instance['post_style'] ?? 'mini')); if (!in_array($post_style, ['card', 'mini'], true)) { $post_style = !empty($instance['show_img']) ? 'card' : 'mini'; } ?>





sanitize_text_field((string) ($new_instance['title'] ?? '')), '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, 'show_posts' => !empty($new_instance['show_posts']) ? 1 : 0, 'limit' => max(0, min(12, (int) ($new_instance['limit'] ?? 6))), 'post_style' => $post_style, 'orderby' => $orderby, ]; } }