*/ function aksrt_single_build_context($post_id = null): array { $post_id = $post_id ? (int) $post_id : (int) get_the_ID(); $settings = function_exists('aksrt_resolve_single_post_display_settings') ? aksrt_resolve_single_post_display_settings($post_id) : []; $views = function_exists('aksrt_get_post_views') ? (int) aksrt_get_post_views($post_id) : 0; $comment_count = (int) get_comments_number($post_id); $like_count = function_exists('aksrt_get_post_likes') ? (int) aksrt_get_post_likes($post_id) : 0; $favorite_count = function_exists('aksrt_get_post_favorites') ? (int) aksrt_get_post_favorites($post_id) : 0; $word_count = function_exists('aksrt_post_word_count') && !empty($settings['word_count_enabled']) ? aksrt_post_word_count($post_id) : 0; $reading_minutes = function_exists('aksrt_reading_minutes') && !empty($settings['reading_time_enabled']) ? aksrt_reading_minutes($post_id) : 0; $meta_items = []; if (empty($settings['hide_time'])) { $meta_items[] = [ 'icon' => 'far fa-calendar-alt', 'text' => get_the_date('', $post_id), ]; } $meta_items[] = [ 'icon' => 'far fa-eye', 'text' => sprintf( __('浏览 %s', 'aksrt'), function_exists('aksrt_format_number') ? aksrt_format_number($views) : number_format_i18n($views) ), ]; $meta_items[] = [ 'icon' => 'far fa-comment-dots', 'text' => sprintf(__('评论 %s', 'aksrt'), number_format_i18n($comment_count)), ]; if ($word_count > 0) { $meta_items[] = [ 'icon' => 'far fa-file-word', 'text' => sprintf(__('约 %s 字', 'aksrt'), number_format_i18n($word_count)), ]; } if ($reading_minutes > 0) { $meta_items[] = [ 'icon' => 'far fa-hourglass', 'text' => sprintf(_n('约 %d 分钟', '约 %d 分钟', $reading_minutes, 'aksrt'), $reading_minutes), ]; } $copyright = trim((string) ($settings['copyright_text'] ?? '')); if ($copyright === '') { $copyright = sprintf( __('本文由 %s 原创发布,转载请注明出处。', 'aksrt'), get_the_author_meta('display_name', (int) get_post_field('post_author', $post_id)) ); } $paid_settings = class_exists('AKSRT_Settings') ? AKSRT_Settings::get_paid_content_settings() : []; $paid_display = is_array($paid_settings['display'] ?? null) ? $paid_settings['display'] : []; $paid_box_position = (string) ($paid_display['box_position'] ?? 'top'); if ($paid_box_position === 'box_top') { $paid_box_position = 'top'; } elseif ($paid_box_position === 'box_bottom') { $paid_box_position = 'bottom'; } if (!in_array($paid_box_position, ['top', 'bottom'], true)) { $paid_box_position = 'top'; } $show_cover = !empty($settings['show_cover']) && (string) ($settings['cover_url'] ?? '') !== ''; $show_toc = !empty($settings['toc_enabled']); $has_download = function_exists('aksrt_is_downloadable_content') && aksrt_is_downloadable_content($post_id); $breadcrumbs_html = ''; if (!empty($settings['breadcrumbs']) && function_exists('aksrt_breadcrumbs')) { ob_start(); aksrt_breadcrumbs($settings['breadcrumbs_home'] ?? ''); $breadcrumbs_html = trim((string) ob_get_clean()); } $status_badge = ''; $post_status = get_post_status($post_id); if ($post_status && $post_status !== 'publish') { $status_map = [ 'draft' => ['label' => __('草稿', 'aksrt'), 'class' => 'jb-yellow'], 'pending' => ['label' => __('待审核', 'aksrt'), 'class' => 'jb-red'], 'private' => ['label' => __('私密', 'aksrt'), 'class' => 'b-black opacity8'], 'future' => ['label' => __('定时发布', 'aksrt'), 'class' => 'c-blue'], ]; if (isset($status_map[$post_status])) { $status_badge = '' . esc_html($status_map[$post_status]['label']) . ''; } } $aside_widgets = is_active_sidebar('sidebar-article') || is_active_sidebar('all_sidebar_top') || is_active_sidebar('all_sidebar_bottom'); return [ 'post_id' => $post_id, 'settings' => $settings, 'show_cover' => $show_cover, 'show_toc' => $show_toc, 'cover_url' => (string) ($settings['cover_url'] ?? ''), 'cover_type' => (string) ($settings['cover_type'] ?? 'none'), 'img_scale' => (int) ($settings['article_image_cover_scale'] ?? 35), 'video_scale' => (int) ($settings['article_video_cover_scale'] ?? 56), 'slide_images' => array_values(array_filter((array) ($settings['slide_images'] ?? []))), 'episode_count' => max(0, (int) get_post_meta($post_id, '_aksrt_featured_video_episode', true)), 'meta_items' => $meta_items, 'views' => $views, 'comment_count' => $comment_count, 'like_count' => $like_count, 'favorite_count' => $favorite_count, 'is_liked' => function_exists('aksrt_is_post_liked') ? aksrt_is_post_liked($post_id) : false, 'is_favorited' => function_exists('aksrt_is_post_favorited') ? aksrt_is_post_favorited($post_id) : false, 'copyright_text' => $copyright, 'front_content' => (string) ($settings['front_content'] ?? ''), 'after_content' => (string) ($settings['after_content'] ?? ''), 'content_maxheight' => !empty($settings['maxheight_enabled']) ? max(0, (int) ($settings['maxheight'] ?? 0)) : 0, 'has_download' => $has_download, 'paid_box_position' => $paid_box_position, 'breadcrumbs_html' => $breadcrumbs_html, 'status_badge' => $status_badge, 'show_aside' => $aside_widgets || $show_toc || $has_download, 'toc_title' => __('文章目录', 'aksrt'), ]; } endif; if (!function_exists('aksrt_single_is_docs_page')) : /** * Docs fast-path: true when the current post should leave the unified single surface. */ function aksrt_single_is_docs_page(int $post_id): bool { if (!class_exists('AKSRT_Docs_Presenter')) { return false; } return (bool) AKSRT_Docs_Presenter::get_instance()->is_docs_page($post_id); } endif; if (!function_exists('aksrt_single_render_author_bar')) : /** * Render author bar from a real args array (no ambient query vars). * * @param array $args Partial args. */ function aksrt_single_render_author_bar(array $args = []): void { $args = wp_parse_args($args, [ 'extra_class' => '', 'show_actions' => false, 'show_bio' => false, 'meta_items' => [], ]); get_template_part('templates/parts/single-author-bar', null, $args); } endif; if (!function_exists('aksrt_single_render_cover')) : /** * Cover / slide / video header. * * @param array $ctx Single context. */ function aksrt_single_render_cover(array $ctx): void { if (empty($ctx['show_cover']) || $ctx['cover_url'] === '') { return; } $type = (string) $ctx['cover_type']; $badge = (string) $ctx['status_badge']; $crumbs = (string) $ctx['breadcrumbs_html']; $meta_items = is_array($ctx['meta_items'] ?? null) ? $ctx['meta_items'] : []; $img_scale = (int) $ctx['img_scale']; $video_scale = (int) $ctx['video_scale']; $episode = (int) $ctx['episode_count']; $slides = is_array($ctx['slide_images'] ?? null) ? $ctx['slide_images'] : []; if ($type === 'video') : ?>

0) : ?>
$slide_url) : ?>
<?php echo esc_attr(get_the_title()); ?>

<?php echo esc_attr(get_the_title()); ?>

$ctx Single context. */ function aksrt_single_render_box_header(array $ctx): void { $settings = is_array($ctx['settings'] ?? null) ? $ctx['settings'] : []; ?>

true, 'meta_items' => empty($ctx['show_cover']) ? (array) $ctx['meta_items'] : [], ]); ?>
$ctx Single context. */ function aksrt_single_render_actions(array $ctx): void { $settings = is_array($ctx['settings'] ?? null) ? $ctx['settings'] : []; $post_id = (int) $ctx['post_id']; $like_count = (int) $ctx['like_count']; $favorite_count = (int) $ctx['favorite_count']; $is_liked = !empty($ctx['is_liked']); $is_favorited = !empty($ctx['is_favorited']); ?>
$ctx Single context. */ function aksrt_single_render_content_footer(array $ctx): void { $settings = is_array($ctx['settings'] ?? null) ? $ctx['settings'] : []; $post_id = (int) $ctx['post_id']; ?>
©
THE END
$ctx Single context. */ function aksrt_single_render_author_card(array $ctx): void { if (!function_exists('aksrt_get_user_dashboard_view')) { return; } $author_id = (int) get_the_author_meta('ID'); $dashboard = aksrt_get_user_dashboard_view($author_id, ['viewer_id' => get_current_user_id()]); $recent = is_array($dashboard['recent_posts'] ?? null) ? $dashboard['recent_posts'] : []; $stats = [ ['label' => __('文章', 'aksrt'), 'value' => (int) ($dashboard['post_count'] ?? 0)], ['label' => __('评论', 'aksrt'), 'value' => (int) ($dashboard['comment_count'] ?? 0)], ['label' => __('收藏', 'aksrt'), 'value' => (int) ($dashboard['favorite_count'] ?? 0)], ]; $bio = trim((string) get_the_author_meta('description')); ?> $ctx Single context. */ function aksrt_single_render_related(array $ctx): void { $settings = is_array($ctx['settings'] ?? null) ? $ctx['settings'] : []; if (empty($settings['related_enabled']) || !function_exists('aksrt_render_post_list')) { return; } $post_id = (int) $ctx['post_id']; $count = max(1, min(12, (int) ($settings['related_count'] ?? 6))); $title = (string) ($settings['related_title'] ?? ''); $args = [ 'post_type' => get_post_type($post_id), 'post_status' => 'publish', 'post__not_in' => [$post_id], 'posts_per_page' => $count, 'ignore_sticky_posts' => true, ]; if (($settings['related_type'] ?? 'category') === 'tag') { $tag_ids = wp_get_post_terms($post_id, 'post_tag', ['fields' => 'ids']); if (!empty($tag_ids) && !is_wp_error($tag_ids)) { $args['tag__in'] = $tag_ids; } } else { $cat_ids = wp_get_post_terms($post_id, 'category', ['fields' => 'ids']); if (!empty($cat_ids) && !is_wp_error($cat_ids)) { $args['category__in'] = $cat_ids; } } $query = new WP_Query($args); if (!$query->have_posts()) { wp_reset_postdata(); return; } ?> $ctx Single context. */ function aksrt_single_render_article(array $ctx): void { $settings = is_array($ctx['settings'] ?? null) ? $ctx['settings'] : []; $maxheight = (int) $ctx['content_maxheight']; ?>
>
'

', 'after' => '

', ]); ?>
$ctx Single context. */ function aksrt_single_render_after_box(array $ctx): void { $settings = is_array($ctx['settings'] ?? null) ? $ctx['settings'] : []; if (!empty($settings['authordesc'])) { aksrt_single_render_author_card($ctx); } aksrt_single_render_prevnext(); aksrt_single_render_related($ctx); } endif; if (!function_exists('aksrt_single_render_aside')) : /** * Page-owned single aside (not a generic sidebar prepend hack). * * @param array $ctx Single context. */ function aksrt_single_render_aside(array $ctx): void { if (empty($ctx['show_aside']) || wp_is_mobile()) { return; } ?> |null $ctx Optional prebuilt context. */ function aksrt_single(?array $ctx = null): void { $ctx = is_array($ctx) ? $ctx : aksrt_single_build_context(); if (empty($ctx['show_cover'])) { if ($ctx['breadcrumbs_html'] !== '') { echo $ctx['breadcrumbs_html']; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } elseif (function_exists('aksrt_breadcrumbs')) { $settings = is_array($ctx['settings'] ?? null) ? $ctx['settings'] : []; aksrt_breadcrumbs($settings['breadcrumbs_home'] ?? ''); } } else { aksrt_single_render_cover($ctx); } do_action('aksrt_single_before', get_post()); aksrt_single_render_article($ctx); do_action('aksrt_single_article_after', get_post()); aksrt_single_render_after_box($ctx); do_action('aksrt_single_after', get_post()); } endif;