esc_html__('按排序/版块筛选展示论坛帖子。', 'aksrt'), 'classname' => 'widget_aksrt_forum_topic_lists', ] ); } public function widget($args, $instance): void { if (!post_type_exists('aksrt_forum_topic')) { return; } $count = max(1, min(30, (int) ($instance['count'] ?? 8))); $orderby = sanitize_key((string) ($instance['orderby'] ?? 'date')); $style = sanitize_key((string) ($instance['style'] ?? 'mini')); $plate_id = (int) ($instance['plate_id'] ?? 0); $current_plate = !empty($instance['current_plate']); if ($current_plate) { $resolved = $this->resolve_current_plate_id(); if ($resolved <= 0) { return; } $plate_id = $resolved; } $query = [ 'post_type' => 'aksrt_forum_topic', 'post_status' => 'publish', 'posts_per_page' => $count, 'order' => 'DESC', ]; switch ($orderby) { case 'views': $query['meta_key'] = '_aksrt_views'; $query['orderby'] = 'meta_value_num'; break; case 'comments': $query['orderby'] = 'comment_count'; break; case 'modified': $query['orderby'] = 'modified'; break; default: $query['orderby'] = 'date'; } if ($plate_id > 0) { $query['meta_query'] = [[ 'key' => '_aksrt_plate_id', 'value' => $plate_id, ]]; } $q = new \WP_Query($query); if (!$q->have_posts()) { wp_reset_postdata(); return; } 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 } $list_class = $style === 'detail' ? 'aksrt-ftopic-list is-detail' : 'aksrt-ftopic-list is-mini'; echo '
sanitize_text_field((string) ($new_instance['title'] ?? '')), 'count' => max(1, min(30, (int) ($new_instance['count'] ?? 8))), 'orderby' => $orderby, 'style' => ($new_instance['style'] ?? '') === 'detail' ? 'detail' : 'mini', 'plate_id' => max(0, (int) ($new_instance['plate_id'] ?? 0)), 'current_plate' => !empty($new_instance['current_plate']) ? 1 : 0, ]; } }