esc_html__('热门/最新/精华等栏目切换的帖子列表(共享迷你行 + 懒加载)。', 'aksrt'), 'classname' => 'widget_aksrt_forum_tab_topics', ] ); } public function widget($args, $instance): void { if (!post_type_exists('aksrt_forum_topic')) { return; } $tabs = $this->normalize_tabs($instance['tabs'] ?? []); if (!$tabs) { $tabs = [ ['title' => __('最新', 'aksrt'), 'orderby' => 'date'], ['title' => __('热门', 'aksrt'), 'orderby' => 'views'], ['title' => __('精华', 'aksrt'), 'orderby' => 'essence'], ]; } $count = max(1, min(20, (int) ($instance['count'] ?? 6))); $style = sanitize_key((string) ($instance['style'] ?? 'mini')); if (!in_array($style, ['mini', 'rank'], true)) { $style = 'mini'; } $plate = max(0, (int) ($instance['plate'] ?? 0)); $uid = 'aksrt-ftab-' . esc_attr($this->id); // Prefer WidgetAjax forum-topics (HotTopics payload with style/plate). $rest = rest_url('aksrt/v1/widgets/forum-topics'); 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 '
'; echo $args['after_widget']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * @param mixed $raw * @return list
sanitize_text_field((string) ($new_instance['title'] ?? '')), 'count' => max(1, min(20, (int) ($new_instance['count'] ?? 6))), 'style' => $style, 'plate' => max(0, (int) ($new_instance['plate'] ?? 0)), 'tabs' => sanitize_textarea_field((string) ($new_instance['tabs'] ?? '')), ]; } }