true, 'summary_enabled' => true, 'summary_length' => 200, 'default_cover' => '', 'layout' => 'grid', 'columns' => 2, 'source_type' => 'category', 'source_ids' => '', 'subpage_display' => 'cards', 'subpage_count' => 6, 'sidebar' => true, 'pagination' => 'numeric', 'per_page' => 12, 'post_count' => false, 'orderby' => 'date', ]; $settings = array_merge($defaults, $special); // Per-page meta override $meta_layout = get_post_meta($post_id, '_aksrt_special_layout', true); $meta_columns = get_post_meta($post_id, '_aksrt_special_columns', true); $meta_source = get_post_meta($post_id, '_aksrt_special_source_type', true); $meta_ids = get_post_meta($post_id, '_aksrt_special_source_ids', true); if ($meta_layout) $settings['layout'] = sanitize_key($meta_layout); if ($meta_columns) $settings['columns'] = max(1, min(4, (int) $meta_columns)); if ($meta_source) $settings['source_type'] = sanitize_key($meta_source); if ($meta_ids !== '' && $meta_ids !== false) $settings['source_ids'] = $meta_ids; $layout = in_array($settings['layout'], ['grid', 'list', 'masonry'], true) ? $settings['layout'] : 'grid'; $columns = max(1, min(4, (int) $settings['columns'])); $show_cover = !empty($settings['cover_enabled']); $show_summary = !empty($settings['summary_enabled']); $summary_len = max(50, min(500, (int) $settings['summary_length'])); $subpage_style = in_array($settings['subpage_display'], ['cards', 'list', 'timeline'], true) ? $settings['subpage_display'] : 'cards'; $per_page = max(4, min(48, (int) $settings['per_page'])); $orderby = in_array($settings['orderby'], ['date', 'modified', 'views', 'comments'], true) ? $settings['orderby'] : 'date'; // 聚合内容源 $source_type = sanitize_key($settings['source_type']); $source_ids = array_filter(array_map('absint', explode(',', (string) $settings['source_ids']))); $aggregated_posts = []; if (!empty($source_ids)) { $args = [ 'posts_per_page' => $per_page, 'post_status' => 'publish', 'orderby' => ($orderby === 'modified') ? 'modified' : 'date', 'order' => 'DESC', ]; if ($source_type === 'category') { $args['category__in'] = $source_ids; } elseif ($source_type === 'tag') { $args['tag__in'] = $source_ids; } $aggregated_query = new WP_Query($args); $aggregated_posts = $aggregated_query->posts; } // 子页面列表 $children_per_page = max(1, min(20, (int) $settings['subpage_count'])); $children = get_pages([ 'child_of' => $post_id, 'sort_column' => 'menu_order', 'sort_order' => 'ASC', 'parent' => $post_id, 'number' => $children_per_page, ]); ?>