esc_html__('横向滚动的文章卡片/迷你列表。', 'aksrt'), 'classname' => 'widget_aksrt_oneline_posts', ] ); } public function widget($args, $instance): void { $count = max(1, min(20, (int) ($instance['count'] ?? 8))); $style = sanitize_key((string) ($instance['style'] ?? 'card')); if (!in_array($style, ['card', 'mini', 'list'], true)) { $style = 'card'; } $orderby = sanitize_key((string) ($instance['orderby'] ?? 'date')); $cat = (int) ($instance['cat'] ?? 0); $limit_day = max(0, (int) ($instance['limit_day'] ?? 0)); $query = [ 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => $count, 'ignore_sticky_posts' => true, 'no_found_rows' => true, ]; if ($cat > 0) { $query['cat'] = $cat; } if ($limit_day > 0) { $query['date_query'] = [['after' => $limit_day . ' days ago']]; } switch ($orderby) { case 'views': $query['meta_key'] = 'aksrt_post_views'; $query['orderby'] = 'meta_value_num'; $query['order'] = 'DESC'; break; case 'comments': $query['orderby'] = 'comment_count'; $query['order'] = 'DESC'; break; case 'rand': $query['orderby'] = 'rand'; break; default: $query['orderby'] = 'date'; $query['order'] = 'DESC'; } $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 } echo '
sanitize_text_field((string) ($new_instance['title'] ?? '')), 'count' => max(1, min(20, (int) ($new_instance['count'] ?? 8))), 'style' => $style, 'orderby' => $orderby, 'cat' => max(0, (int) ($new_instance['cat'] ?? 0)), 'limit_day' => max(0, (int) ($new_instance['limit_day'] ?? 0)), ]; } }