'widget_aksrt_category_tabs', 'description' => esc_html__('多分类切换内容流,可挂载到首页内容挂载区。', 'aksrt'), 'customize_selective_refresh' => true, ] ); } public function widget($args, $instance): void { $context = aksrt_home_widget_resolve_context($args); $title = apply_filters('widget_title', $instance['title'] ?? '', $instance, $this->id_base); $title = $title !== '' ? $title : __('热门分类', 'aksrt'); $count = max(1, min(12, (int) ($instance['count'] ?? 6))); $columns = aksrt_home_widget_effective_columns((int) ($instance['columns'] ?? 3), $context); $layout = aksrt_home_widget_effective_layout( aksrt_home_widget_resolve_layout($instance['layout'] ?? 'card', 'card'), $context ); $show_more = ! empty($instance['show_more']); $tabs = $this->resolve_tabs($instance); echo $args['before_widget']; echo '
'; if (empty($tabs)) { echo function_exists('aksrt_get_widget_null') ? aksrt_get_widget_null(__('暂无可用分类', 'aksrt')) : '

' . esc_html__('暂无可用分类', 'aksrt') . '

'; echo '
'; echo $args['after_widget']; return; } ?>

$tab) { ?>
> 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 { $title = (string) ($instance['title'] ?? ''); $category_ids = aksrt_home_widget_normalize_category_ids($instance['category_ids'] ?? [], 6); $count = (int) ($instance['count'] ?? 6); $columns = (int) ($instance['columns'] ?? 3); $layout = aksrt_home_widget_resolve_layout($instance['layout'] ?? 'card', 'card'); $show_more = ! empty($instance['show_more']); $categories = aksrt_home_widget_available_categories(); ?>

id="get_field_id('show_more')); ?>" name="get_field_name('show_more')); ?>" value="1">

sanitize_text_field($new_instance['title'] ?? ''), 'category_ids' => aksrt_home_widget_normalize_category_ids($new_instance['category_ids'] ?? [], 6), 'count' => max(1, min(12, absint($new_instance['count'] ?? 6))), 'columns' => max(1, min(4, absint($new_instance['columns'] ?? 3))), 'layout' => aksrt_home_widget_resolve_layout($new_instance['layout'] ?? 'card', 'card'), 'show_more' => ! empty($new_instance['show_more']) ? 1 : 0, ]; } /** * Resolve configured category tabs. * * @param array $instance Widget instance. * @return array */ private function resolve_tabs(array $instance): array { $category_ids = aksrt_home_widget_normalize_category_ids($instance['category_ids'] ?? [], 6); if (empty($category_ids)) { $category_ids = aksrt_home_widget_fallback_category_ids(4); } $tabs = []; foreach ($category_ids as $category_id) { $term = get_term($category_id, 'category'); if (! $term || is_wp_error($term)) { continue; } $tabs[] = [ 'id' => (int) $category_id, 'name' => $term->name, 'link' => get_category_link($category_id), ]; } return $tabs; } }