' . esc_html__('暂无可用分类', 'aksrt') . '
';
@@ -69,33 +69,96 @@ class CategoryTabsWidget extends \WP_Widget {
$tab) {
- $query = new \WP_Query([
- 'post_type' => aksrt_home_widget_post_types(),
- 'post_status' => 'publish',
- 'posts_per_page' => $count,
- 'ignore_sticky_posts' => true,
- 'no_found_rows' => true,
- 'cat' => (int) $tab['id'],
- ]);
?>
- >
-
-
-
+
>
+ aksrt_home_widget_post_types(),
+ 'post_status' => 'publish',
+ 'posts_per_page' => $count,
+ 'ignore_sticky_posts' => true,
+ 'no_found_rows' => true,
+ 'cat' => (int) $tab['id'],
+ ]);
+ aksrt_home_widget_render_post_grid($query, $layout, $columns, $context);
+ wp_reset_postdata();
+ if ($show_more) : ?>
+
+
+
+
+ ';
echo $args['after_widget'];
}
- public function form($instance): void {
+public function form($instance): void {
$title = (string) ($instance['title'] ?? '');
$category_ids = aksrt_home_widget_normalize_category_ids($instance['category_ids'] ?? [], 6);
$count = (int) ($instance['count'] ?? 6);
diff --git a/src/AKSRT/Widgets/WidgetUserRanking.php b/src/AKSRT/Widgets/WidgetUserRanking.php
index c64dd3c2..b8fb394d 100644
--- a/src/AKSRT/Widgets/WidgetUserRanking.php
+++ b/src/AKSRT/Widgets/WidgetUserRanking.php
@@ -23,7 +23,8 @@ class WidgetUserRanking extends \WP_Widget {
$count = max(1, min(20, (int) ($instance['count'] ?? 5)));
$show_avatar = !empty($instance['show_avatar']);
- $users = $this->get_ranking($rank_by, $count);
+ $desc_mode = sanitize_key((string) ($instance['desc'] ?? 'desc'));
+ $users = $this->get_ranking($rank_by, $count, $desc_mode);
if (empty($users)) return;
echo $args['before_widget'];
@@ -60,8 +61,13 @@ class WidgetUserRanking extends \WP_Widget {
echo '';
}
- // 昵称
+ // 昵称 + 可选签名/附加信息
+ echo '
';
// 数值
echo '
' . esc_html($user['value']) . '';
@@ -73,7 +79,7 @@ class WidgetUserRanking extends \WP_Widget {
echo $args['after_widget'];
}
- private function get_ranking(string $rank_by, int $count): array {
+ private function get_ranking(string $rank_by, int $count, string $desc_mode = 'desc'): array {
$users = [];
switch ($rank_by) {
@@ -93,6 +99,7 @@ class WidgetUserRanking extends \WP_Widget {
'id' => (int) $row['user_id'],
'name' => $user->display_name,
'value' => number_format_i18n((int) $row['credits']) . ' 积分',
+ 'desc' => $this->user_extra_desc((int) $row['user_id'], $user, $desc_mode),
];
}
}
@@ -112,6 +119,7 @@ class WidgetUserRanking extends \WP_Widget {
'id' => $user->ID,
'name' => $user->display_name,
'value' => number_format_i18n($post_count) . ' 篇',
+ 'desc' => $this->user_extra_desc($user->ID, $user, $desc_mode),
];
}
}
@@ -137,6 +145,7 @@ class WidgetUserRanking extends \WP_Widget {
'id' => $uid,
'name' => $user->display_name,
'value' => number_format_i18n((int) $row['val']) . ' 天',
+ 'desc' => $this->user_extra_desc($uid, $user, $desc_mode),
];
}
if (count($users) >= $count) break;
@@ -163,6 +172,7 @@ class WidgetUserRanking extends \WP_Widget {
'id' => $uid,
'name' => $user->display_name,
'value' => number_format_i18n((int) $row['val']) . ' 天',
+ 'desc' => $this->user_extra_desc($uid, $user, $desc_mode),
];
}
if (count($users) >= $count) break;
@@ -189,6 +199,7 @@ class WidgetUserRanking extends \WP_Widget {
'id' => (int) $row['following_id'],
'name' => $user->display_name,
'value' => number_format_i18n((int) $row['cnt']) . ' 粉丝',
+ 'desc' => $this->user_extra_desc((int) $row['following_id'], $user, $desc_mode),
];
}
}
@@ -200,6 +211,37 @@ class WidgetUserRanking extends \WP_Widget {
return $users;
}
+
+ private function user_extra_desc(int $user_id, $user, string $mode): string {
+ switch ($mode) {
+ case 'user_registered':
+ if ($user && !empty($user->user_registered)) {
+ $days = max(0, (int) floor((time() - strtotime($user->user_registered)) / DAY_IN_SECONDS));
+ return sprintf(__('加入 %d 天', 'aksrt'), $days);
+ }
+ return '';
+ case 'last_login':
+ $t = (string) get_user_meta($user_id, 'aksrt_last_login', true);
+ if ($t === '') {
+ $t = (string) get_user_meta($user_id, 'last_login', true);
+ }
+ return $t !== '' ? sprintf(__('最近登录 %s', 'aksrt'), $t) : '';
+ case 'last_checkin':
+ $t = (string) get_user_meta($user_id, 'aksrt_last_checkin', true);
+ if ($t === '') {
+ $t = (string) get_user_meta($user_id, 'last_checkin', true);
+ }
+ return $t !== '' ? sprintf(__('最近签到 %s', 'aksrt'), $t) : '';
+ case 'desc':
+ default:
+ $bio = get_user_meta($user_id, 'description', true);
+ if (!is_string($bio) || $bio === '') {
+ $bio = $user ? (string) $user->description : '';
+ }
+ return $bio !== '' ? wp_trim_words($bio, 12) : '';
+ }
+ }
+
public function form($instance): void {
$title = !empty($instance['title']) ? $instance['title'] : __('排行榜', 'aksrt');
$rank_by = !empty($instance['rank_by']) ? $instance['rank_by'] : 'credits';
@@ -230,6 +272,15 @@ class WidgetUserRanking extends \WP_Widget {
+
+
+
+