esc_html__('分类封面 + 最新文章列表聚合卡。', 'aksrt'), 'classname' => 'widget_aksrt_term_aggregation', ] ); } public function widget($args, $instance): void { $taxonomy = sanitize_key((string) ($instance['taxonomy'] ?? 'category')); if (!taxonomy_exists($taxonomy)) { $taxonomy = 'category'; } $term_ids = $this->parse_ids((string) ($instance['term_ids'] ?? '')); $count = max(1, min(12, (int) ($instance['count'] ?? 4))); $orderby = sanitize_key((string) ($instance['orderby'] ?? 'date')); $columns = max(1, min(3, (int) ($instance['columns'] ?? 1))); if (!$term_ids) { // Fallback: top terms by count. $terms = get_terms([ 'taxonomy' => $taxonomy, 'number' => max(1, min(4, (int) ($instance['auto_terms'] ?? 2))), 'orderby' => 'count', 'order' => 'DESC', 'hide_empty' => true, ]); if (is_wp_error($terms) || !$terms) { return; } $term_ids = array_map(static fn($t) => (int) $t->term_id, $terms); } 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 '
sanitize_text_field((string) ($new_instance['title'] ?? '')), 'taxonomy' => sanitize_key((string) ($new_instance['taxonomy'] ?? 'category')), 'term_ids' => sanitize_text_field((string) ($new_instance['term_ids'] ?? '')), 'count' => max(1, min(12, (int) ($new_instance['count'] ?? 4))), 'columns' => max(1, min(3, (int) ($new_instance['columns'] ?? 1))), 'orderby' => $orderby, 'auto_terms' => max(1, min(4, (int) ($new_instance['auto_terms'] ?? 2))), ]; } }