Files
wordpress-theme-aksrt/src/Core/ScriptsPart1b.php
T
kate522 f7cedc7163 fix(header): unify top icon-card size and layout
Add a single always-loaded header-cards.css that normalizes the
顶部多功能组件图标卡片 geometry (equal-width cells, fixed 45px icon
badge, zibll mobile padding) across all pages, and enqueue it from
ScriptsPart1b. Remove the orphan header-components.css + subdirectory
that were never enqueued. Repoint the icon-card contract test at the
new stylesheet.
2026-08-19 18:34:48 +08:00

792 lines
34 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* @package AKSRT
*/
namespace AKSRT\Core;
defined('ABSPATH') || exit;
trait ScriptsPart1b {
public function enqueue_public(): void {
$base_uri = get_template_directory_uri();
$version = AKSRT_VERSION;
$zibll_uri = $base_uri . '/assets/vendor/zibll';
$fa5_uri = $base_uri . '/assets/vendor/fontawesome5';
// Zibll's frontend runtime is the single public dependency stack.
wp_deregister_script('jquery');
wp_register_script(
'jquery',
$zibll_uri . '/js/libs/jquery.min.js',
[],
'1.9.1',
false
);
wp_enqueue_script('jquery');
wp_enqueue_script(
'aksrt-passive-events',
$base_uri . '/assets/js/passive-events.js',
[],
$version,
false
);
wp_enqueue_style('_bootstrap', $zibll_uri . '/css/bootstrap.min.css', [], '3.4.1');
wp_enqueue_style('_fontawesome', $fa5_uri . '/css/all.min.css', [], '5.15.4');
wp_enqueue_style('_main', $zibll_uri . '/css/main.min.css', ['_bootstrap', '_fontawesome'], $version);
wp_enqueue_script('bootstrap', $zibll_uri . '/js/libs/bootstrap.min.js', ['jquery'], '3.4.1', true);
wp_enqueue_style('aksrt-style', get_stylesheet_uri(), ['_main'], $version);
$lazy_animation = class_exists('\AKSRT\Settings\Settings')
? (string) \AKSRT\Settings\Settings::get_value('lazy_animation', 'blur')
: 'blur';
if ($lazy_animation === 'fade') {
wp_add_inline_style('aksrt-style', '.lazyloaded{--lazy-animation:lazy_fade!important;}');
} elseif ($lazy_animation === 'scale') {
wp_add_inline_style('aksrt-style', '.lazyloaded{--lazy-animation:lazy_scale!important;}');
}
$core_bundle = get_template_directory() . '/assets/css/build/core.min.css';
if (file_exists($core_bundle)) {
wp_enqueue_style(
'aksrt-core-bundle',
$base_uri . '/assets/css/build/core.min.css',
['aksrt-style'],
filemtime($core_bundle) ?: $version
);
$core_dep = 'aksrt-core-bundle';
} else {
$tokens_path = get_template_directory() . '/assets/css/core/tokens.css';
wp_enqueue_style(
'aksrt-tokens',
$base_uri . '/assets/css/core/tokens.css',
['aksrt-style'],
file_exists($tokens_path) ? (string) filemtime($tokens_path) : $version
);
foreach (['reset', 'typography', 'buttons', 'forms', 'alerts'] as $slug) {
$core_path = get_template_directory() . '/assets/css/core/' . $slug . '.css';
wp_enqueue_style(
'aksrt-core-' . $slug,
$base_uri . '/assets/css/core/' . $slug . '.css',
['aksrt-tokens'],
file_exists($core_path) ? (string) filemtime($core_path) : $version
);
}
$core_dep = 'aksrt-tokens';
}
$ext_css_files = ['animations', 'components-ext', 'color-utilities'];
foreach ($ext_css_files as $slug) {
$ext_path = get_template_directory() . '/assets/css/core/' . $slug . '.css';
if (file_exists($ext_path)) {
wp_enqueue_style(
'aksrt-ext-' . $slug,
$base_uri . '/assets/css/core/' . $slug . '.css',
[$core_dep],
filemtime($ext_path) ?: $version
);
}
}
$deps = [$core_dep];
$enqueue_module = function ($slug) use ($base_uri, $version, $deps) {
$path = get_template_directory() . '/assets/css/frontend/' . $slug . '.css';
wp_enqueue_style(
'aksrt-' . $slug,
$base_uri . '/assets/css/frontend/' . $slug . '.css',
$deps,
(file_exists($path) ? (string) filemtime($path) : $version)
);
};
// AKSRT domain styles load after Zibll main.css. The old aggregate is
// intentionally not used because it contains the removed navigation CSS.
$enqueue_module('base');
$enqueue_module('header-cards');
$enqueue_module('card-primitives');
$enqueue_module('overlay-primitives');
$enqueue_module('layout');
$enqueue_module('footer');
$enqueue_module('floating-buttons');
$enqueue_module('enhancements');
// 4a-b. 全局补充样式(骨架屏、空状态、分页、加载指示器)
foreach (['skeleton', 'empty-state', 'pagination', 'ajax-spinner', 'modal-runtime'] as $slug) {
$css_path = get_template_directory() . '/assets/css/frontend/' . $slug . '.css';
if (file_exists($css_path)) {
wp_enqueue_style(
'aksrt-' . $slug,
$base_uri . '/assets/css/frontend/' . $slug . '.css',
[$core_dep],
filemtime($css_path) ?: $version
);
}
}
// Shared VIP purchase/poll coordinator for modal and credits surfaces.
$vip_on = class_exists('\AKSRT\Settings\Settings')
&& !empty(\AKSRT\Settings\Settings::get_payment_vip_settings()['enabled']);
$credits_on = is_user_logged_in()
&& class_exists('\AKSRT\Settings\Settings')
&& \AKSRT\Settings\Settings::credits_enabled();
$balance_on = is_user_logged_in()
&& class_exists('\AKSRT\Credits\Balance')
&& \AKSRT\Credits\Balance::enabled();
$affiliate_on = is_user_logged_in()
&& class_exists('\\AKSRT\\Settings\\Settings')
&& !empty(\AKSRT\Settings\Settings::get_affiliate_settings()['enabled']);
$vip_coordinator = get_template_directory() . '/assets/js/vip-purchase-coordinator.js';
if (($vip_on || $credits_on || $affiliate_on) && file_exists($vip_coordinator)) {
wp_enqueue_script(
'aksrt-vip-coordinator',
$base_uri . '/assets/js/vip-purchase-coordinator.js',
['aksrt-core-request'],
(string) filemtime($vip_coordinator),
true
);
}
// VIP modal (zibll .pay-vip)
if ($vip_on) {
$vip_css = get_template_directory() . '/assets/css/frontend/vip-modal.css';
if (file_exists($vip_css)) {
wp_enqueue_style(
'aksrt-vip-modal',
$base_uri . '/assets/css/frontend/vip-modal.css',
[$core_dep],
(string) filemtime($vip_css)
);
}
$vip_js = get_template_directory() . '/assets/js/pay-vip.js';
if (file_exists($vip_js)) {
wp_enqueue_script(
'aksrt-pay-vip',
$base_uri . '/assets/js/pay-vip.js',
['loader_js', 'aksrt-lazy-image-attr', 'aksrt-core-request', 'aksrt-core-modal-runtime', 'aksrt-vip-coordinator', 'aksrt-notyf'],
(string) filemtime($vip_js),
true
);
}
}
// Print stylesheet — only load on singular pages
if (is_singular()) {
wp_enqueue_style(
'aksrt-print',
$base_uri . '/assets/css/frontend/print.css',
[],
$version,
'print'
);
}
// 4b. 路由判定
$is_home_or_archive = is_home() || is_front_page() || is_archive() || is_search();
// 资源单页(post + _aksrt_is_resource)
$is_single_resource = (function_exists('aksrt_is_resource_post') && is_singular() && aksrt_is_resource_post(get_queried_object_id()));
// 普通博客 single(排除资源型 post)
$is_single_post = is_singular('post') && !$is_single_resource;
// 付费下载/付费墙:任意 singular 需收银台/下载脚本
$is_paid_content_single = false;
if (is_singular()) {
$qid = (int) get_queried_object_id();
if ($qid > 0) {
if (function_exists('aksrt_is_downloadable_content') && aksrt_is_downloadable_content($qid)) {
$is_paid_content_single = true;
} elseif (function_exists('aksrt_is_paid_post') && aksrt_is_paid_post($qid)) {
$is_paid_content_single = true;
} elseif (function_exists('aksrt_get_pay_meta')) {
$pm = aksrt_get_pay_meta($qid);
$pt = (string) ($pm['pay_type'] ?? 'no');
$is_paid_content_single = ($pt !== '' && $pt !== 'no');
}
}
}
// 独立下载页模板
$is_download_file_page = is_page_template('templates/pages/page-download-file.php');
// 资源虚拟列表 /resources/
$is_resource_archive = function_exists('aksrt_is_resource_archive') && aksrt_is_resource_archive();
// /user/{nicename}/ 自定义重写路由(class-aksrt-user.php 注册)
// 此路径下 is_page() / is_page_template() 均为 false,需手动识别以正确入队 CSS
$is_profile_route = (bool) get_query_var('aksrt_author_identifier');
$is_user_center_route = (bool) get_query_var('aksrt_user_center');
$is_static_page = is_page() || is_singular('page') || $is_profile_route || $is_user_center_route;
$is_auth_route = (bool) get_query_var('aksrt_sign');
$is_auth_page = $is_auth_route
|| (function_exists('aksrt_is_auth_page_request') && aksrt_is_auth_page_request());
$is_profile_page = $is_profile_route
|| (function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page())
|| (function_exists('aksrt_is_user_center_page') && aksrt_is_user_center_page())
|| is_page_template('templates/pages/page-profile.php')
|| is_page_template('templates/pages/page-user-home.php');
$is_fixed_homepage = function_exists('aksrt_is_fixed_homepage_request') && aksrt_is_fixed_homepage_request();
// CMS route detection.
$is_cms_mode = function_exists('aksrt_is_cms_mode') ? aksrt_is_cms_mode() : false;
// 首页/归档/搜索:卡片 + 侧栏
if ($is_home_or_archive) {
$enqueue_module('post-card');
$enqueue_module('sidebar');
$enqueue_module('breadcrumb');
}
// 单篇文章:所有 single 相关样式
if ($is_single_post) {
// Prefer discrete enqueues over CSS @import (cache-bust + parallel load).
$single_parts = [
'zibll-utilities',
'single-post/shell',
'single-post/content',
'single-post/code-blocks',
'single-post/navigation',
'single-post/cover',
'single-post/author-actions',
'single-post/related-toc',
'single-post/hidden-content',
];
$single_dep = $deps[0] ?? $core_dep;
foreach ($single_parts as $part) {
$path = get_template_directory() . '/assets/css/frontend/' . $part . '.css';
if (!file_exists($path)) {
continue;
}
wp_enqueue_style(
'aksrt-' . str_replace('/', '-', $part),
$base_uri . '/assets/css/frontend/' . $part . '.css',
is_string($single_dep) ? [$single_dep] : (array) $deps,
filemtime($path) ?: $version
);
}
// Keep aggregator handle for any third-party deps that target it.
$enqueue_module('single-post');
$enqueue_module('post-card'); // 相关推荐使用 post-card 局部样式
// Comments pack (zibll 1:1 discrete files).
$comment_parts = ['comments/shell', 'comments/mobile-item'];
$comment_dep = $deps[0] ?? $core_dep;
foreach ($comment_parts as $part) {
$path = get_template_directory() . '/assets/css/frontend/' . $part . '.css';
if (!file_exists($path)) {
continue;
}
wp_enqueue_style(
'aksrt-' . str_replace('/', '-', $part),
$base_uri . '/assets/css/frontend/' . $part . '.css',
is_string($comment_dep) ? [$comment_dep] : (array) $deps,
filemtime($path) ?: $version
);
}
$enqueue_module('comments'); // aggregator handle for third-party deps
$enqueue_module('sidebar');
$enqueue_module('breadcrumb');
}
// 静态页面 + 用户中心 + 友链等
if ($is_static_page) {
$enqueue_module('pages');
$enqueue_module('single-post'); // 复用 entry-content 排版
$enqueue_module('post-card'); // post-grid / post-card(用户中心文章列表)
$enqueue_module('breadcrumb');
// 启用评论的页面
if (comments_open() || get_comments_number()) {
$enqueue_module('comments');
}
}
// 用户中心 / 公开主页:路由专属 CSS
if ($is_profile_page) {
// 举报脚本(用户主页和个人中心均需要)
$report_js_path = get_template_directory() . '/assets/js/report.js';
if (file_exists($report_js_path)) {
wp_enqueue_script(
'aksrt-report',
$base_uri . '/assets/js/report.js',
['aksrt-notyf'],
filemtime($report_js_path) ?: $version,
true
);
}
// 关注脚本
$follow_js_path = get_template_directory() . '/assets/js/follow.js';
if (file_exists($follow_js_path)) {
wp_enqueue_script(
'aksrt-follow',
$base_uri . '/assets/js/follow.js',
['aksrt-notyf'],
filemtime($follow_js_path) ?: $version,
true
);
}
$author_js_path = get_template_directory() . '/assets/js/author.js';
if (file_exists($author_js_path)) {
wp_enqueue_script(
'aksrt-author',
$base_uri . '/assets/js/author.js',
['loader_js'],
(string) filemtime($author_js_path),
true
);
}
// Enqueue every profile leaf directly. Nested @imports are not versioned,
// so browsers can otherwise retain stale layout/modal rules after deploys.
$profile_parts = ['layout', 'lists', 'modals'];
$profile_deps = [$core_dep];
foreach ($profile_parts as $part_index => $part) {
$part_path = get_template_directory() . '/assets/css/routes/profile/' . $part . '.css';
$is_last_part = $part_index === count($profile_parts) - 1;
$part_handle = $is_last_part ? 'aksrt-route-profile' : 'aksrt-route-profile-' . $part;
wp_enqueue_style(
$part_handle,
$base_uri . '/assets/css/routes/profile/' . $part . '.css',
$profile_deps,
file_exists($part_path) ? (string) filemtime($part_path) : $version
);
$profile_deps = [$part_handle];
}
// 本人中心 vs 公开主页拆分加载
$is_public_user_home = $is_profile_route
|| (function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page())
|| is_page_template('templates/pages/page-user-home.php');
if ($is_public_user_home) {
// /user/{nicename}/ 公开主页
$user_home_css_path = get_template_directory() . '/assets/css/routes/user-home.css';
wp_enqueue_style(
'aksrt-route-user-home',
$base_uri . '/assets/css/routes/user-home.css',
['aksrt-route-profile'],
file_exists($user_home_css_path) ? (string) filemtime($user_home_css_path) : $version
);
} else {
// Keep the legacy aggregate's cascade order, but give every leaf its
// own cache version. The final leaf retains the public aggregate handle.
$user_center_parts = [
'user-center/shell',
'user-center/credits',
'user-center/vip',
'user-center/level',
'user-center/settings',
'revenue',
'user-center/revenue',
'user-center/revenue-earnings',
'user-center/responsive',
];
$user_center_deps = ['aksrt-route-profile'];
foreach ($user_center_parts as $part_index => $part) {
$part_path = get_template_directory() . '/assets/css/routes/' . $part . '.css';
$is_last_part = $part_index === count($user_center_parts) - 1;
$part_handle = $is_last_part
? 'aksrt-route-user-center'
: 'aksrt-route-' . str_replace('/', '-', $part);
wp_enqueue_style(
$part_handle,
$base_uri . '/assets/css/routes/' . $part . '.css',
$user_center_deps,
file_exists($part_path) ? (string) filemtime($part_path) : $version
);
$user_center_deps = [$part_handle];
}
// Orders is a lazy user-center panel, so its independent assets must
// be ready before client-side panel replacement can insert its markup.
$has_orders_panel = false;
if (class_exists('\AKSRT\User\Center')) {
$dashboard_tabs = \AKSRT\User\Center::get_instance()->get_dashboard_tabs();
$has_orders_panel = isset($dashboard_tabs['orders']);
}
if ($has_orders_panel) {
$orders_css = get_template_directory() . '/assets/css/routes/orders.css';
if (file_exists($orders_css)) {
wp_enqueue_style(
'aksrt-orders',
$base_uri . '/assets/css/routes/orders.css',
[$core_dep],
(string) filemtime($orders_css)
);
}
$order_center_js = get_template_directory() . '/assets/js/order-center.js';
if (file_exists($order_center_js)) {
wp_enqueue_script(
'aksrt-order-center',
$base_uri . '/assets/js/order-center.js',
['loader_js', 'aksrt-lazy-image-attr', 'aksrt-rehydrate', 'aksrt-core-request', 'aksrt-core-modal-runtime'],
(string) filemtime($order_center_js),
true
);
}
}
$identity_js = get_template_directory() . '/assets/js/routes/user-center-auth.js';
if (file_exists($identity_js)) {
wp_enqueue_script(
'aksrt-route-user-center-auth',
$base_uri . '/assets/js/routes/user-center-auth.js',
['loader_js', 'aksrt-core-request', 'aksrt-core-modal-runtime'],
(string) filemtime($identity_js),
true
);
}
$user_center_deps = file_exists($identity_js)
? ['loader_js', 'aksrt-route-user-center-auth', 'aksrt-notyf']
: ['loader_js', 'aksrt-notyf'];
if ($has_orders_panel && wp_script_is('aksrt-order-center', 'registered')) {
$user_center_deps[] = 'aksrt-order-center';
}
wp_enqueue_script(
'aksrt-route-user-center',
$base_uri . '/assets/js/routes/user-center.js',
$user_center_deps,
file_exists(get_template_directory() . '/assets/js/routes/user-center.js')
? (string) filemtime(get_template_directory() . '/assets/js/routes/user-center.js')
: $version,
true
);
// 绑定手机短信发送按钮依赖 sign-register 的 data-aksrt-sms-trigger 契约
$sign_register_js = get_template_directory() . '/assets/js/sign-register.js';
if (file_exists($sign_register_js)) {
wp_enqueue_script(
'aksrt-sign-register',
$base_uri . '/assets/js/sign-register.js',
['aksrt-route-user-center'],
(string) filemtime($sign_register_js),
true
);
}
}
}
// 搜索结果页:路由专属 CSS(顶部卡片/胶囊搜索框/工具栏/空状态/关键词高亮)
if (is_search()) {
wp_enqueue_style(
'aksrt-route-search',
$base_uri . '/assets/css/routes/search.css',
['aksrt-tokens', 'aksrt-post-card'],
$version
);
}
// 分类汇总页:路由专属 CSS
if (is_page_template('templates/pages/page-categories.php')) {
wp_enqueue_style(
'aksrt-route-categories',
$base_uri . '/assets/css/routes/categories.css',
['aksrt-tokens'],
$version
);
}
// 友情链接页:路由专属 CSS
if (is_page_template('templates/pages/page-friends.php')) {
wp_enqueue_style(
'aksrt-route-friends',
$base_uri . '/assets/css/routes/friends.css',
['aksrt-tokens'],
file_exists(get_template_directory() . '/assets/css/routes/friends.css')
? (string) filemtime(get_template_directory() . '/assets/css/routes/friends.css')
: $version
);
}
// 网址导航页(zibll links.php)
// 文章导航页(zibll postsnavs.php)
if (is_page_template('templates/pages/page-posts-navs.php')) {
$page_navs_js = get_template_directory() . '/assets/js/page-navs.js';
if (file_exists($page_navs_js)) {
wp_enqueue_script(
'aksrt-page-navs',
$base_uri . '/assets/js/page-navs.js',
['aksrt-lazy-image-attr'],
(string) filemtime($page_navs_js),
true
);
}
$pn_css = get_template_directory() . '/assets/css/routes/posts-navs.css';
if (file_exists($pn_css)) {
wp_enqueue_style(
'aksrt-route-posts-navs',
$base_uri . '/assets/css/routes/posts-navs.css',
['aksrt-tokens'],
(string) filemtime($pn_css)
);
}
$section_navs = get_template_directory() . '/assets/js/section-navs.js';
if (file_exists($section_navs)) {
wp_enqueue_script(
'aksrt-section-navs',
$base_uri . '/assets/js/section-navs.js',
['jquery'],
(string) filemtime($section_navs),
true
);
}
$pn_js = get_template_directory() . '/assets/js/posts-navs-page.js';
if (file_exists($pn_js)) {
wp_enqueue_script(
'aksrt-posts-navs-page',
$base_uri . '/assets/js/posts-navs-page.js',
['jquery', 'aksrt-notyf'],
(string) filemtime($pn_js),
true
);
}
}
// 文章归档页
if (is_page_template('templates/pages/page-archives.php')) {
$ar_css = get_template_directory() . '/assets/css/routes/archives.css';
if (file_exists($ar_css)) {
wp_enqueue_style(
'aksrt-route-archives',
$base_uri . '/assets/css/routes/archives.css',
['aksrt-tokens'],
(string) filemtime($ar_css)
);
}
}
// 禁封申诉页
if (is_page_template('templates/pages/page-ban-appeal.php')) {
$ba_css = get_template_directory() . '/assets/css/routes/ban-appeal.css';
if (file_exists($ba_css)) {
wp_enqueue_style(
'aksrt-route-ban-appeal',
$base_uri . '/assets/css/routes/ban-appeal.css',
['aksrt-tokens'],
(string) filemtime($ba_css)
);
}
$ba_js = get_template_directory() . '/assets/js/ban-appeal-page.js';
if (file_exists($ba_js)) {
wp_enqueue_script(
'aksrt-ban-appeal-page',
$base_uri . '/assets/js/ban-appeal-page.js',
['aksrt-notyf'],
(string) filemtime($ba_js),
true
);
}
}
// 消息中心页
if (is_page_template('templates/pages/page-messages.php')) {
$messages_css = get_template_directory() . '/assets/css/frontend/messages.css';
if (file_exists($messages_css)) {
wp_enqueue_style(
'aksrt-messages',
$base_uri . '/assets/css/frontend/messages.css',
['aksrt-tokens'],
(string) filemtime($messages_css)
);
}
$messages_js = get_template_directory() . '/assets/js/messages.js';
if (file_exists($messages_js)) {
wp_enqueue_script(
'aksrt-messages',
$base_uri . '/assets/js/messages.js',
['loader_js'],
(string) filemtime($messages_js),
true
);
}
$conversation_js = get_template_directory() . '/assets/js/conversation.js';
if (file_exists($conversation_js)) {
wp_enqueue_script(
'aksrt-conversation',
$base_uri . '/assets/js/conversation.js',
['loader_js'],
(string) filemtime($conversation_js),
true
);
}
}
// Unified share-data builder — single payload assembler for every share
// surface (dropdown, copy, WeChat, poster). Loaded on any singular view.
if (is_singular()) {
$share_data_js = get_template_directory() . '/assets/js/share-data-builder.js';
if (file_exists($share_data_js)) {
wp_enqueue_script(
'aksrt-share-data',
$base_uri . '/assets/js/share-data-builder.js',
['loader_js'],
(string) filemtime($share_data_js),
true
);
}
}
// 单篇文章 — poster-share.js(海报分享按钮)
if (is_singular('post')) {
$poster_js = get_template_directory() . '/assets/js/poster-share.js';
if (file_exists($poster_js)) {
wp_enqueue_script(
'aksrt-poster-share',
$base_uri . '/assets/js/poster-share.js',
['loader_js', 'aksrt-share-data'],
(string) filemtime($poster_js),
true
);
}
}
// 登录/注册/绑定 — pages + auth 路由专属 CSS
if ($is_auth_page) {
$enqueue_module('pages');
// Auth 路由专属样式
wp_enqueue_style(
'aksrt-route-auth',
$base_uri . '/assets/css/routes/auth.css',
['aksrt-tokens'],
file_exists(get_template_directory() . '/assets/css/routes/auth.css')
? (string) filemtime(get_template_directory() . '/assets/css/routes/auth.css')
: $version
);
$sign_css = get_template_directory() . '/assets/css/routes/sign.css';
if (file_exists($sign_css)) {
wp_enqueue_style(
'aksrt-route-sign',
$base_uri . '/assets/css/routes/sign.css',
['aksrt-tokens'],
(string) filemtime($sign_css)
);
}
// 手机号注册/登录 + SMS 倒计时 + 人机验证联动
$sign_js_path = get_template_directory() . '/assets/js/sign-register.js';
if (file_exists($sign_js_path)) {
wp_enqueue_script(
'aksrt-sign-register',
$base_uri . '/assets/js/sign-register.js',
['loader_js'],
(string) filemtime($sign_js_path),
true
);
}
}
// 404 页面
if (is_404()) {
$enqueue_module('pages');
}
// Resource archives use the canonical Zibll article-card stylesheet.
if ($is_resource_archive || $is_single_resource || ($is_cms_mode && ($is_home_or_archive || $is_static_page) && !$is_fixed_homepage)) {
if (!$is_home_or_archive && !$is_single_post && !$is_static_page) {
$enqueue_module('post-card');
}
}
// 单篇资源专属样式
if ($is_single_resource) {
$enqueue_module('single-post');
$enqueue_module('resource-meta');
$enqueue_module('comments');
}
// 资源归档专属样式
if ($is_resource_archive) {
$enqueue_module('resource-archive');
}
// 单篇资源 / 付费内容 / 独立下载页:下载 + 收银台脚本
if ($is_single_resource || $is_paid_content_single || $is_download_file_page) {
$cms_download_js_path = get_template_directory() . '/assets/js/cms-download.js';
wp_enqueue_script(
'aksrt-cms-download',
$base_uri . '/assets/js/cms-download.js',
['loader_js', 'aksrt-runtime'],
file_exists($cms_download_js_path) ? (string) filemtime($cms_download_js_path) : $version,
true
);
}
if ($is_fixed_homepage) {
$enqueue_module('post-card');
$homepage_style_deps = ['_main', 'aksrt-layout', 'aksrt-post-card'];
$homepage_style_deps = array_values(array_filter(
$homepage_style_deps,
static fn(string $handle): bool => wp_style_is($handle, 'registered')
));
// Enqueue split files directly so every leaf stylesheet receives its own
// cache version. A version on homepage-fixed.css cannot invalidate the
// unversioned nested @imports used by that legacy aggregate file.
$homepage_style_parts = [
'base-1',
'base-2',
'base-3',
'ajax-tab-skeleton-placeholder',
'ajax-tab-error-state',
];
$part_deps = $homepage_style_deps;
foreach ($homepage_style_parts as $part_index => $part_name) {
$is_last_part = $part_index === count($homepage_style_parts) - 1;
$part_handle = $is_last_part
? 'aksrt-homepage-fixed'
: 'aksrt-homepage-fixed-' . sanitize_key($part_name);
$part_relative_path = '/assets/css/frontend/homepage-fixed/' . $part_name . '.css';
$part_path = get_template_directory() . $part_relative_path;
wp_enqueue_style(
$part_handle,
$base_uri . $part_relative_path,
$part_deps,
file_exists($part_path) ? (string) filemtime($part_path) : $version
);
$part_deps = [$part_handle];
}
}
// 积分相关:已登录 + 启用积分功能时全站加载
if ($credits_on || $balance_on || $affiliate_on) {
$enqueue_module('credits');
// profile 页:加载 credits.js(签到 + 邀请 + 提现交互)
if ($is_profile_page) {
$credits_js_path = get_template_directory() . '/assets/js/credits.js';
wp_enqueue_script(
'aksrt-credits',
$base_uri . '/assets/js/credits.js',
['loader_js', 'aksrt-lazy-image-attr', 'aksrt-core-modal-runtime', 'aksrt-vip-coordinator', 'aksrt-notyf'],
file_exists($credits_js_path) ? (string) filemtime($credits_js_path) : $version,
true
);
}
}
// Badges UI: user center + public profile (zibll medal modal/list).
if (class_exists('\AKSRT\User\Badges') && \AKSRT\User\Badges::enabled()) {
$is_badge_surface = $is_profile_page
|| is_author()
|| (function_exists('aksrt_is_user_home_page') && aksrt_is_user_home_page())
|| (function_exists('aksrt_is_user_center_page') && aksrt_is_user_center_page());
if ($is_badge_surface) {
$enqueue_module('medal');
$badge_actions_path = get_template_directory() . '/assets/js/user-badge-actions.js';
if (file_exists($badge_actions_path)) {
wp_enqueue_script(
'aksrt-user-badge-actions',
$base_uri . '/assets/js/user-badge-actions.js',
['loader_js', 'aksrt-core-modal-runtime'],
(string) filemtime($badge_actions_path),
true
);
}
}
}
$this->enqueue_public_fonts_js_and_data($base_uri, $core_dep, $deps, $is_fixed_homepage, $is_home_or_archive, $is_single_post, $is_single_resource, $version);
}
}