Files
wordpress-theme-aksrt/inc/classes/scripts-traits/trait-aksrt-scripts-part-1b.php
T
kate522andClaude Fable 5 663c0bb53e feat(shop): 交易中心壳层 1:1 统一购物车/订单/收益
抽出 commerce header 与二级导航,购物车/订单/收益共用主站交易中心壳层;收益 stats 轻量化,降低独立电商后台观感。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 11:32:04 +08:00

1277 lines
56 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
defined('ABSPATH') || exit;
trait AKSRT_Scripts_Part_1b {
public function enqueue_public(): void {
$base_uri = get_template_directory_uri();
$version = AKSRT_VERSION;
wp_enqueue_script('jquery');
wp_enqueue_script(
'aksrt-passive-events',
$base_uri . '/assets/js/passive-events.js',
[],
$version,
false
);
wp_enqueue_style(
'bootstrap5',
'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css',
[],
'5.3.3'
);
wp_enqueue_script(
'bootstrap5',
'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js',
['jquery'],
'5.3.3',
true
);
wp_enqueue_style('aksrt-style', get_stylesheet_uri(), ['bootstrap5'], $version);
$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 {
wp_enqueue_style('aksrt-tokens', $base_uri . '/assets/css/core/tokens.css', ['aksrt-style'], $version);
foreach (['reset', 'typography', 'buttons', 'forms', 'alerts'] as $slug) {
wp_enqueue_style('aksrt-core-' . $slug, $base_uri . '/assets/css/core/' . $slug . '.css', ['aksrt-tokens'], $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) {
wp_enqueue_style(
'aksrt-' . $slug,
$base_uri . '/assets/css/frontend/' . $slug . '.css',
$deps,
$version
);
};
// 4a. 全站必加 — 优先使用合并文件
$frontend_bundle = get_template_directory() . '/assets/css/build/frontend-base.min.css';
if (file_exists($frontend_bundle)) {
wp_enqueue_style(
'aksrt-frontend-bundle',
$base_uri . '/assets/css/build/frontend-base.min.css',
[$core_dep],
filemtime($frontend_bundle) ?: $version
);
// Keep shell-level source overrides live during the refactor.
foreach (['base', 'nav', 'footer'] as $shell_slug) {
$shell_css_path = get_template_directory() . '/assets/css/frontend/' . $shell_slug . '.css';
if (file_exists($shell_css_path)) {
wp_enqueue_style(
'aksrt-shell-' . $shell_slug,
$base_uri . '/assets/css/frontend/' . $shell_slug . '.css',
['aksrt-frontend-bundle'],
filemtime($shell_css_path) ?: $version
);
}
}
} else {
$enqueue_module('base');
$enqueue_module('zibll-compat-vars');
$enqueue_module('card-primitives');
$enqueue_module('overlay-primitives');
$enqueue_module('nav');
$enqueue_module('layout');
$enqueue_module('footer');
$enqueue_module('floating-buttons');
$enqueue_module('theme-background');
$enqueue_module('menu-decorations');
$enqueue_module('enhancements');
}
// 4a-b. 全局补充样式(骨架屏、空状态、分页、加载指示器)
foreach (['skeleton', 'empty-state', 'pagination', 'ajax-spinner'] 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
);
}
}
// 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,或历史 aksrt_resource CPT)
$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;
// 资源虚拟归档 /resources(含历史 CPT 归档)
$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('user_nicename');
$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 形态判定(可能在博客流页面也需要 grid-cms 卡片样式)
$is_cms_mode = function_exists('aksrt_is_cms_mode') ? aksrt_is_cms_mode() : false;
// 首页/归档/搜索:卡片 + 顶部多功能组件 + 侧栏
if ($is_home_or_archive) {
$enqueue_module('header-components');
$enqueue_module('post-card');
$enqueue_module('widgets');
$enqueue_module('sidebar');
$enqueue_module('breadcrumb');
}
// 单篇文章:所有 single 相关样式
if ($is_single_post) {
$enqueue_module('single-post');
$enqueue_module('post-card'); // 相关推荐使用 post-card 局部样式
$enqueue_module('comments');
$enqueue_module('widgets');
$enqueue_module('sidebar');
$enqueue_module('breadcrumb');
}
// 静态页面 + 用户中心 + 友链等
if ($is_static_page) {
$enqueue_module('pages');
$enqueue_module('single-post'); // 复用 entry-content 排版
$enqueue_module('widgets'); // widget-card / widget-title
$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',
[],
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',
[],
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',
['aksrt-script'],
(string) filemtime($author_js_path),
true
);
}
// 共享基础 profile 样式(兼容层)
$profile_css_path = get_template_directory() . '/assets/css/routes/profile.css';
wp_enqueue_style(
'aksrt-route-profile',
$base_uri . '/assets/css/routes/profile.css',
['aksrt-tokens'],
file_exists($profile_css_path) ? (string) filemtime($profile_css_path) : $version
);
// 本人中心 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 {
// 本人中心(page template)
$user_center_css_path = get_template_directory() . '/assets/css/routes/user-center.css';
wp_enqueue_style(
'aksrt-route-user-center',
$base_uri . '/assets/css/routes/user-center.css',
['aksrt-route-profile'],
file_exists($user_center_css_path) ? (string) filemtime($user_center_css_path) : $version
);
wp_enqueue_script(
'aksrt-route-user-center',
$base_uri . '/assets/js/routes/user-center.js',
['aksrt-script'],
$version,
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
);
}
// 交易中心共享壳层(购物车 / 订单 / 收益)
$is_commerce_center = is_page_template('templates/pages/page-orders.php')
|| is_page_template('templates/pages/page-cart.php')
|| is_page_template('templates/pages/page-revenue.php');
if ($is_commerce_center) {
$commerce_css = get_template_directory() . '/assets/css/routes/commerce.css';
if (file_exists($commerce_css)) {
wp_enqueue_style(
'aksrt-commerce-shell',
$base_uri . '/assets/css/routes/commerce.css',
['aksrt-tokens'],
(string) filemtime($commerce_css)
);
}
}
// 订单中心页
if (is_page_template('templates/pages/page-orders.php')) {
wp_enqueue_style(
'aksrt-orders',
$base_uri . '/assets/css/routes/orders.css',
['aksrt-tokens'],
$version
);
// 微信扫码支付需要本地二维码生成器(AksrtShare.buildQrDataUrl)。
$weixin_share_orders = get_template_directory() . '/assets/js/weixin-share.js';
if (file_exists($weixin_share_orders)) {
wp_enqueue_script(
'aksrt-weixin-share',
$base_uri . '/assets/js/weixin-share.js',
['aksrt-script'],
(string) filemtime($weixin_share_orders),
true
);
}
wp_enqueue_script(
'aksrt-order-center',
$base_uri . '/assets/js/order-center.js',
['aksrt-script', 'aksrt-weixin-share'],
file_exists(get_template_directory() . '/assets/js/order-center.js')
? (string) filemtime(get_template_directory() . '/assets/js/order-center.js')
: $version,
true
);
}
// 收益中心页
if (is_page_template('templates/pages/page-revenue.php')) {
wp_enqueue_style(
'aksrt-revenue',
$base_uri . '/assets/css/routes/revenue.css',
['aksrt-tokens'],
$version
);
}
// 消息中心页
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',
['aksrt-script'],
(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',
['aksrt-script'],
(string) filemtime($conversation_js),
true
);
}
}
// Forum pages (home / plate / board tax / tag / topic / compose / plate-cat)
$is_forum_surface = is_page_template('templates/pages/page-forums.php')
|| is_page_template('templates/forum/forum-compose.php')
|| is_tax('aksrt_forum_board')
|| is_tax('aksrt_forum_tag')
|| is_tax('aksrt_plate_cat')
|| is_singular('aksrt_forum_topic')
|| is_singular('aksrt_forum_plate');
if ($is_forum_surface) {
wp_enqueue_style(
'aksrt-forum',
$base_uri . '/assets/css/frontend/forum.css',
['aksrt-tokens'],
$version
);
}
// Product archive pages (category / tag)
if (is_tax('aksrt_product_cat') || is_tax('aksrt_product_tag')) {
wp_enqueue_style(
'aksrt-product-archive',
$base_uri . '/assets/css/frontend/product-archive.css',
['aksrt-tokens'],
$version
);
}
// Product detail page
if (is_page_template('templates/pages/page-product.php')) {
wp_enqueue_style(
'aksrt-route-product',
$base_uri . '/assets/css/routes/product.css',
['aksrt-tokens'],
file_exists(get_template_directory() . '/assets/css/routes/product.css')
? (string) filemtime(get_template_directory() . '/assets/css/routes/product.css')
: $version
);
wp_enqueue_script(
'aksrt-product-purchase',
$base_uri . '/assets/js/product-purchase.js',
['aksrt-script'],
file_exists(get_template_directory() . '/assets/js/product-purchase.js')
? (string) filemtime(get_template_directory() . '/assets/js/product-purchase.js')
: $version,
true
);
}
// Cart page
if (is_page_template('templates/pages/page-cart.php')) {
wp_enqueue_style(
'aksrt-route-cart',
$base_uri . '/assets/css/routes/cart.css',
['aksrt-tokens'],
file_exists(get_template_directory() . '/assets/css/routes/cart.css')
? (string) filemtime(get_template_directory() . '/assets/css/routes/cart.css')
: $version
);
wp_enqueue_script(
'aksrt-cart-checkout',
$base_uri . '/assets/js/cart-checkout.js',
['aksrt-script'],
file_exists(get_template_directory() . '/assets/js/cart-checkout.js')
? (string) filemtime(get_template_directory() . '/assets/js/cart-checkout.js')
: $version,
true
);
}
// Product edit page
if (is_page_template('templates/pages/page-product-edit.php')) {
wp_enqueue_style(
'aksrt-route-product',
$base_uri . '/assets/css/routes/product.css',
['aksrt-tokens'],
file_exists(get_template_directory() . '/assets/css/routes/product.css')
? (string) filemtime(get_template_directory() . '/assets/css/routes/product.css')
: $version
);
wp_enqueue_script(
'aksrt-product-purchase',
$base_uri . '/assets/js/product-purchase.js',
['aksrt-script'],
file_exists(get_template_directory() . '/assets/js/product-purchase.js')
? (string) filemtime(get_template_directory() . '/assets/js/product-purchase.js')
: $version,
true
);
}
// Forum edit page
if (is_singular('aksrt_forum_topic') && isset($_GET['edit']) && $_GET['edit'] === '1') {
$forum_edit_js = get_template_directory() . '/assets/js/forum-edit.js';
if (file_exists($forum_edit_js)) {
wp_enqueue_script(
'aksrt-forum-edit',
$base_uri . '/assets/js/forum-edit.js',
['aksrt-script'],
(string) filemtime($forum_edit_js),
true
);
}
}
if ($is_forum_surface) {
$forum_governance_js = get_template_directory() . '/assets/js/forum-governance.js';
if (file_exists($forum_governance_js)) {
wp_enqueue_script(
'aksrt-forum-governance',
$base_uri . '/assets/js/forum-governance.js',
['aksrt-script'],
(string) filemtime($forum_governance_js),
true
);
wp_localize_script('aksrt-forum-governance', 'aksrtForumGovernance', [
'ajaxUrl' => admin_url('admin-ajax.php'),
'restUrl' => esc_url_raw(rest_url()),
'restNonce' => wp_create_nonce('wp_rest'),
'publicNonce' => wp_create_nonce('aksrt_public_nonce'),
'i18n' => [
'empty' => __('内容空空如也', 'aksrt'),
'loadMore' => __('加载更多', 'aksrt'),
'loading' => __('加载中…', 'aksrt'),
],
]);
}
// §7.4: enqueue media on compose and edit pages
$is_compose = is_page_template('templates/forum/forum-compose.php');
$is_edit = is_singular('aksrt_forum_topic') && isset($_GET['edit']) && $_GET['edit'] === '1';
if ($is_compose || $is_edit) {
wp_enqueue_media();
}
}
// 商品编辑页共用 page-edit.js
if (is_page_template('templates/pages/page-product-edit.php')) {
$page_edit_js = get_template_directory() . '/assets/js/page-edit.js';
if (file_exists($page_edit_js)) {
wp_enqueue_script(
'aksrt-page-edit',
$base_uri . '/assets/js/page-edit.js',
['aksrt-script'],
(string) filemtime($page_edit_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',
['aksrt-script'],
(string) filemtime($share_data_js),
true
);
}
}
// 单篇文章 — poster-share.js(海报分享按钮)
if (is_singular('post') || is_singular('aksrt_forum_topic')) {
$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',
['aksrt-script', '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',
['aksrt-script'],
(string) filemtime($sign_js_path),
true
);
}
}
// 404 页面
if (is_404()) {
$enqueue_module('pages');
}
// grid-cms 卡片样式
if ($is_resource_archive || $is_single_resource || ($is_cms_mode && ($is_home_or_archive || $is_static_page) && !$is_fixed_homepage)) {
$enqueue_module('post-card-cms');
// 确保 post-card 基础样式也加载(若上面分支未加)
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');
$enqueue_module('widgets');
}
// 资源归档专属样式
if ($is_resource_archive) {
$enqueue_module('resource-archive');
}
// 单篇资源:下载脚本
if ($is_single_resource) {
$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',
['aksrt-script'],
file_exists($cms_download_js_path) ? (string) filemtime($cms_download_js_path) : $version,
true
);
}
// CMS 首页模块系统:仅在首页 + cms 形态加载
$is_cms_home = ($is_home_or_archive && $is_cms_mode) || $is_fixed_homepage;
// 管理员预览模式(?aksrt_preview=...):无论站点风格都允许加载模块系统资源
$is_preview = is_user_logged_in() && current_user_can('manage_options') && isset($_GET['aksrt_preview']);
if ($is_cms_home || $is_preview) {
$enqueue_module('home-modules');
$enqueue_module('post-card'); // 模块内复用
$enqueue_module('header-components'); // header components 模块依赖
$enqueue_module('post-card-cms'); // grid-cms 卡片依赖
wp_enqueue_script(
'aksrt-cms-home-modules',
$base_uri . '/assets/js/cms-home-modules.js',
['aksrt-script'],
$version,
true
);
}
if ($is_fixed_homepage) {
$homepage_css_path = get_template_directory() . '/assets/css/frontend/homepage-fixed.css';
wp_enqueue_style(
'aksrt-homepage-fixed',
$base_uri . '/assets/css/frontend/homepage-fixed.css',
['aksrt-zibll-compat-vars', 'aksrt-layout', 'aksrt-widgets', 'aksrt-post-card'],
file_exists($homepage_css_path) ? (string) filemtime($homepage_css_path) : $version
);
}
// 积分相关:已登录 + 启用积分功能时全站加载
if (is_user_logged_in() && class_exists('AKSRT_Settings') && AKSRT_Settings::credits_enabled()) {
$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',
['aksrt-script'],
file_exists($credits_js_path) ? (string) filemtime($credits_js_path) : $version,
true
);
}
}
// ===== 5. 字体 =====
// 5a. 拉丁字体 - Inter (UI) + Source Serif 4 (正文)
wp_enqueue_style(
'aksrt-fonts',
'https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,500;0,8..60,600;0,8..60,700;1,8..60,400&display=swap',
[],
null
);
// 5b. 中文字体 - jsDelivr CDN (思源黑体 / 思源宋体)
// 仅 regular 字重,避免拖慢首屏;其它字重通过 system fallback (PingFang/微软雅黑)
// Fontsource v5 已按 unicode-range 自动分包,浏览器只会下载用到的简中子集
wp_enqueue_style(
'aksrt-fonts-cn',
'https://cdn.jsdelivr.net/npm/@fontsource/noto-sans-sc@5.2.9/400.css',
[],
null
);
wp_enqueue_style(
'aksrt-fonts-cn-serif',
'https://cdn.jsdelivr.net/npm/@fontsource/noto-serif-sc@5.2.9/400.css',
[],
null
);
// ===== 6. 图标系统 =====
// Font Awesome 5 全站加载(评论回复、单篇互动栏、profile 联系方式等
// 多处模板使用 fa-* 类名,作为全主题图标包统一使用)
wp_enqueue_style(
'aksrt-font-awesome-5',
'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css',
[],
'5.15.4'
);
// ===== 7. JS =====
// Swiper.js(首页/归档/CMS 模块/单篇文章页加载)
$needs_swiper = $is_home_or_archive || $is_single_post || $is_single_resource;
if ($needs_swiper) {
wp_enqueue_style(
'aksrt-swiper',
$base_uri . '/assets/css/frontend/swiper-bundle.min.css',
[],
'11.0'
);
wp_enqueue_script(
'aksrt-swiper',
$base_uri . '/assets/js/swiper-bundle.min.js',
[],
'11.0',
true
);
}
wp_enqueue_script(
'aksrt-qrcode',
'https://cdn.jsdelivr.net/npm/kjua@0.9.0/dist/kjua.min.js',
[],
'0.9.0',
true
);
// Rehydrate system — must load before aksrt-script so AksrtFrontend is available
wp_enqueue_script(
'aksrt-rehydrate',
$base_uri . '/assets/js/rehydrate.js',
[],
file_exists(get_template_directory() . '/assets/js/rehydrate.js')
? (string) filemtime(get_template_directory() . '/assets/js/rehydrate.js')
: $version,
true
);
// Runtime infrastructure: tbquire / notyf / confirm / refreshModal / scrollTopTo / [data-*] declarative
$runtime_js = get_template_directory() . '/assets/js/aksrt-runtime.js';
if (file_exists($runtime_js)) {
wp_enqueue_script(
'aksrt-runtime',
$base_uri . '/assets/js/aksrt-runtime.js',
['aksrt-rehydrate'],
(string) filemtime($runtime_js),
true
);
}
// Core modules (split from main.js) — register with AksrtFrontend
$core_modules = [
'aksrt-core-theme' => 'theme.js',
'aksrt-core-nav' => 'nav.js',
'aksrt-core-search' => 'search.js',
'aksrt-core-dropdown' => 'dropdown.js',
'aksrt-core-scroll' => 'scroll.js',
'aksrt-core-slider' => 'slider.js',
'aksrt-core-article' => 'article.js',
'aksrt-core-comments' => 'comments.js',
'aksrt-core-pagination' => 'pagination.js',
'aksrt-core-archive' => 'archive.js',
'aksrt-core-footer-tabbar' => 'footer-tabbar.js',
'aksrt-core-misc' => 'misc.js',
];
$core_handles = [];
foreach ($core_modules as $handle => $file) {
$path = get_template_directory() . '/assets/js/core/' . $file;
if (file_exists($path)) {
$deps = ['aksrt-rehydrate'];
if ($handle === 'aksrt-core-slider') {
$deps = array_merge($deps, $needs_swiper ? ['aksrt-swiper'] : []);
}
wp_enqueue_script(
$handle,
$base_uri . '/assets/js/core/' . $file,
$deps,
(string) filemtime($path),
true
);
$core_handles[] = $handle;
}
}
wp_enqueue_script(
'aksrt-script',
$base_uri . '/assets/js/main.js',
array_merge(
['jquery', 'bootstrap5', 'aksrt-rehydrate', 'aksrt-runtime'],
$core_handles
),
file_exists(get_template_directory() . '/assets/js/main.js')
? (string) filemtime(get_template_directory() . '/assets/js/main.js')
: $version,
true
);
// SVG icon data + helper (must load before other scripts that use icons)
$svg_icon_js = get_template_directory() . '/assets/js/svg-icon.js';
if (file_exists($svg_icon_js)) {
wp_enqueue_script(
'aksrt-svg-icon',
$base_uri . '/assets/js/svg-icon.js',
[],
(string) filemtime($svg_icon_js),
false // load in <head> so icons are available early
);
}
$svg_helper_js = get_template_directory() . '/assets/js/svg-icon-helper.js';
if (file_exists($svg_helper_js)) {
wp_enqueue_script(
'aksrt-svg-icon-helper',
$base_uri . '/assets/js/svg-icon-helper.js',
['aksrt-svg-icon'],
(string) filemtime($svg_helper_js),
true
);
}
// Page loading indicator (top progress bar)
$loader_js = get_template_directory() . '/assets/js/loader.js';
if (file_exists($loader_js)) {
wp_enqueue_script(
'aksrt-loader',
$base_uri . '/assets/js/loader.js',
[],
(string) filemtime($loader_js),
true
);
}
// Code block enhancements (copy button + language label)
$precode_js = get_template_directory() . '/assets/js/precode.js';
if (file_exists($precode_js)) {
wp_enqueue_script(
'aksrt-precode',
$base_uri . '/assets/js/precode.js',
[],
(string) filemtime($precode_js),
true
);
}
// Input field enhancements (auto-resize, counter, validation)
$input_expand_js = get_template_directory() . '/assets/js/input-expand.js';
if (file_exists($input_expand_js)) {
wp_enqueue_script(
'aksrt-input-expand',
$base_uri . '/assets/js/input-expand.js',
[],
(string) filemtime($input_expand_js),
true
);
}
// Slider CAPTCHA (canvas-based puzzle verification)
$slider_captcha_js = get_template_directory() . '/assets/js/slider-captcha.js';
if (file_exists($slider_captcha_js)) {
wp_enqueue_script(
'aksrt-slider-captcha',
$base_uri . '/assets/js/slider-captcha.js',
[],
(string) filemtime($slider_captcha_js),
true
);
}
// Instant page prefetch (hover to preload)
$instant_page_js = get_template_directory() . '/assets/js/instant-page.js';
if (file_exists($instant_page_js)) {
wp_enqueue_script(
'aksrt-instant-page',
$base_uri . '/assets/js/instant-page.js',
[],
(string) filemtime($instant_page_js),
false // load in <head> for early prefetch capability
);
}
// Touch gesture support (swipe, pull-to-dismiss)
$mini_touch_js = get_template_directory() . '/assets/js/mini-touch.js';
if (file_exists($mini_touch_js)) {
wp_enqueue_script(
'aksrt-mini-touch',
$base_uri . '/assets/js/mini-touch.js',
[],
(string) filemtime($mini_touch_js),
true
);
}
// Section navs: article TOC / scrollspy
$section_navs_js = get_template_directory() . '/assets/js/section-navs.js';
if (file_exists($section_navs_js)) {
wp_enqueue_script(
'aksrt-section-navs',
$base_uri . '/assets/js/section-navs.js',
['aksrt-rehydrate', 'aksrt-runtime'],
(string) filemtime($section_navs_js),
true
);
}
// Video player (MP4/HLS/FLV)
$video_player_js = get_template_directory() . '/assets/js/video-player.js';
if (file_exists($video_player_js)) {
wp_enqueue_script(
'aksrt-video-player',
$base_uri . '/assets/js/video-player.js',
[],
(string) filemtime($video_player_js),
true
);
}
// Image color extraction
$color_extract_js = get_template_directory() . '/assets/js/color-extract.js';
if (file_exists($color_extract_js)) {
wp_enqueue_script(
'aksrt-color-extract',
$base_uri . '/assets/js/color-extract.js',
[],
(string) filemtime($color_extract_js),
true
);
}
$widget_set_js = get_template_directory() . '/assets/js/widget-set.js';
if (file_exists($widget_set_js)) {
wp_enqueue_script(
'aksrt-widget-set',
$base_uri . '/assets/js/widget-set.js',
['aksrt-script', 'aksrt-qrcode'],
(string) filemtime($widget_set_js),
true
);
}
// ===== 全局 UI 增强(Toast、骨架屏、悬停动效、灯箱、滚动感知)=====
$enhancements_css = get_template_directory() . '/assets/css/frontend/enhancements.css';
if (file_exists($enhancements_css)) {
wp_enqueue_style(
'aksrt-enhancements',
$base_uri . '/assets/css/frontend/enhancements.css',
[$core_dep],
(string) filemtime($enhancements_css)
);
}
$enhancements_js = get_template_directory() . '/assets/js/enhancements.js';
if (file_exists($enhancements_js)) {
wp_enqueue_script(
'aksrt-enhancements',
$base_uri . '/assets/js/enhancements.js',
['aksrt-script'],
(string) filemtime($enhancements_js),
true
);
}
$enhancements2_js = get_template_directory() . '/assets/js/enhancements2.js';
if (file_exists($enhancements2_js)) {
wp_enqueue_script(
'aksrt-enhancements2',
$base_uri . '/assets/js/enhancements2.js',
['aksrt-script'],
(string) filemtime($enhancements2_js),
true
);
}
// Reward (打赏)
$reward_js = get_template_directory() . '/assets/js/reward.js';
if (file_exists($reward_js)) {
wp_enqueue_script(
'aksrt-reward',
$base_uri . '/assets/js/reward.js',
['aksrt-script'],
(string) filemtime($reward_js),
true
);
}
// Effects (count-up, countdown, marquee, tilt, FPS detection)
$effects_js = get_template_directory() . '/assets/js/effects.js';
if (file_exists($effects_js)) {
wp_enqueue_script(
'aksrt-effects',
$base_uri . '/assets/js/effects.js',
['aksrt-script'],
(string) filemtime($effects_js),
true
);
}
// Yiyan (一言轮播)
$yiyan_js = get_template_directory() . '/assets/js/yiyan.js';
if (file_exists($yiyan_js)) {
wp_enqueue_script(
'aksrt-yiyan',
$base_uri . '/assets/js/yiyan.js',
[],
(string) filemtime($yiyan_js),
true
);
}
// Frontend translate (默认关)
$translate_js = get_template_directory() . '/assets/js/frontend-translate.js';
if (file_exists($translate_js)) {
wp_enqueue_script(
'aksrt-frontend-translate',
$base_uri . '/assets/js/frontend-translate.js',
[],
(string) filemtime($translate_js),
true
);
}
// Content protection (copy notice / right-click / F12)
$content_protect_js = get_template_directory() . '/assets/js/content-protect.js';
if (file_exists($content_protect_js)) {
wp_enqueue_script(
'aksrt-content-protect',
$base_uri . '/assets/js/content-protect.js',
[],
(string) filemtime($content_protect_js),
false // load in <head> for early binding
);
}
// Site notice popup (global, controlled by Settings)
$site_notice_css = get_template_directory() . '/assets/css/frontend/site-notice.css';
if (file_exists($site_notice_css)) {
wp_enqueue_style(
'aksrt-site-notice',
$base_uri . '/assets/css/frontend/site-notice.css',
[$core_dep],
(string) filemtime($site_notice_css)
);
}
$site_notice_js = get_template_directory() . '/assets/js/site-notice.js';
if (file_exists($site_notice_js)) {
wp_enqueue_script(
'aksrt-site-notice',
$base_uri . '/assets/js/site-notice.js',
[],
(string) filemtime($site_notice_js),
true
);
}
// 弹窗登录/注册(仅未登录用户)
if (!is_user_logged_in()) {
$modal_auth_js = get_template_directory() . '/assets/js/modal-auth.js';
if (file_exists($modal_auth_js)) {
wp_enqueue_script(
'aksrt-modal-auth',
$base_uri . '/assets/js/modal-auth.js',
['aksrt-script'],
(string) filemtime($modal_auth_js),
true
);
}
}
if ($is_fixed_homepage) {
$homepage_js_path = get_template_directory() . '/assets/js/homepage-fixed.js';
wp_enqueue_script(
'aksrt-homepage-fixed',
$base_uri . '/assets/js/homepage-fixed.js',
['aksrt-script'],
file_exists($homepage_js_path) ? (string) filemtime($homepage_js_path) : $version,
true
);
}
// Comment toolbar (emoji, code, bold, Ctrl+Enter) — only when the form is open.
if (is_singular() && comments_open()) {
$comment_tools_path = get_template_directory() . '/assets/js/comment-tools.js';
wp_enqueue_script(
'aksrt-comment-tools',
$base_uri . '/assets/js/comment-tools.js',
['aksrt-script'],
file_exists($comment_tools_path) ? (string) filemtime($comment_tools_path) : $version,
true
);
}
// Comment actions client (like / edit / delete / moderate / pin) — load
// wherever comments can exist, including closed-comment posts. Submission
// itself is handled by main.js initCommentSystem().
if (is_singular() && (comments_open() || (int) get_comments_number() > 0)) {
$comment_ajax_path = get_template_directory() . '/assets/js/comment-ajax.js';
if (file_exists($comment_ajax_path)) {
wp_enqueue_script(
'aksrt-comment-ajax',
$base_uri . '/assets/js/comment-ajax.js',
['aksrt-script'],
(string) filemtime($comment_ajax_path),
true
);
}
}
if (is_singular() || is_page_template('templates/pages/page-forums.php')) {
$page_template_path = get_template_directory() . '/assets/js/page-template.js';
if (file_exists($page_template_path)) {
wp_enqueue_script(
'aksrt-page-template',
$base_uri . '/assets/js/page-template.js',
['aksrt-script'],
(string) filemtime($page_template_path),
true
);
}
}
// Post/resource share functionality
if ($is_single_post || $is_single_resource) {
$weixin_share_path = get_template_directory() . '/assets/js/weixin-share.js';
if (file_exists($weixin_share_path)) {
wp_enqueue_script(
'aksrt-weixin-share',
$base_uri . '/assets/js/weixin-share.js',
['aksrt-script'],
(string) filemtime($weixin_share_path),
true
);
}
$post_share_path = get_template_directory() . '/assets/js/post-share.js';
if (file_exists($post_share_path)) {
wp_enqueue_script(
'aksrt-post-share',
$base_uri . '/assets/js/post-share.js',
['aksrt-script', 'aksrt-weixin-share', 'aksrt-share-data'],
(string) filemtime($post_share_path),
true
);
}
}
// Page navigation (TOC highlight, smooth scroll, doc search)
// 评论回复脚本
if (is_singular() && comments_open() && get_option('thread_comments')) {
wp_enqueue_script('comment-reply');
}
$runtime_routes = $this->resolve_frontend_routes();
// 数据注入 - 全站统一消费 window.aksrtData
wp_localize_script('aksrt-script', 'aksrtData', [
'ajaxUrl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('aksrt_public_nonce'),
'restNonce' => wp_create_nonce('wp_rest'),
'visibilityNonce' => wp_create_nonce('aksrt_visibility'),
'siteUrl' => home_url('/'),
'themeUrl' => AKSRT_URI,
'themeMode' => class_exists('AKSRT_Settings') ? AKSRT_Settings::theme_mode_js_value() : 'auto',
'debug' => defined('WP_DEBUG') && WP_DEBUG,
'debugLog' => defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_LOG') && WP_DEBUG_LOG,
'postPaginationMode' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_post_pagination_mode() : 'load_more',
'commentPaginationMode' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_comment_pagination_mode() : 'numbered',
'homepagePostsPerPage' => function_exists('aksrt_homepage_get_tab_posts_per_page') ? aksrt_homepage_get_tab_posts_per_page() : (int) get_option('posts_per_page'),
'homepageDefaultSort' => class_exists('AKSRT_Settings') ? AKSRT_Settings::homepage_default_sort() : 'modified',
'homepageDefaultView' => class_exists('AKSRT_Settings') ? AKSRT_Settings::homepage_default_view() : 'list',
'homepageSortAjax' => class_exists('AKSRT_Settings') ? AKSRT_Settings::homepage_sort_ajax_enabled() : true,
'homepageStickyTabs' => class_exists('AKSRT_Settings') ? AKSRT_Settings::homepage_sticky_tabs_enabled() : true,
'homepageContentModel' => class_exists('AKSRT_Settings') ? AKSRT_Settings::homepage_content_model() : 'mixed',
'homePostsListEnabled' => !class_exists('AKSRT_Settings') || AKSRT_Settings::home_posts_list_enabled(),
'homeListSortEnabled' => !class_exists('AKSRT_Settings') || AKSRT_Settings::home_list_sort_enabled(),
'homeListSortDropdown' => class_exists('AKSRT_Settings') && AKSRT_Settings::home_list_sort_dropdown(),
// AJAX 翻页文案
'ajaxTrigger' => (class_exists('AKSRT_Settings') && ($t = AKSRT_Settings::get_post_list_style_settings()['ajax_trigger_text'] ?? '') !== '') ? $t : __('加载更多', 'aksrt'),
'ajaxNomore' => (class_exists('AKSRT_Settings') && ($n = AKSRT_Settings::get_post_list_style_settings()['ajax_nomore_text'] ?? '') !== '') ? $n : __('没有更多了', 'aksrt'),
'ajaxLoading' => __('正在加载...', 'aksrt'),
'iasMax' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_post_list_style_settings()['ias_max'] : 3,
'commentIasAuto' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_comment_display_settings()['paging_ajax_ias'] : true,
'commentUploadEnabled' => class_exists('AKSRT_Settings') ? !empty((AKSRT_Settings::get_comment_display_settings()['toolbar']['upload_img'] ?? false)) : false,
'commentUploadUrl' => esc_url_raw(rest_url('aksrt/v1/comment/upload-image')),
'commentUploadMaxSize' => 2 * 1024 * 1024,
'commentIasMax' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_comment_display_settings()['paging_ajax_ias_max'] : 3,
'stickyEnabled' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_post_list_style_settings()['sticky_enabled'] : true,
'stickyPages' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_post_list_style_settings()['sticky_pages'] : ['home', 'cat'],
'badgeShow' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_post_list_style_settings()['badge_show'] : true,
'badgeTypes' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_post_list_style_settings()['badge_types'] : ['pay', 'tag', 'topics', 'cat'],
'search' => [
'mode' => class_exists('AKSRT_Settings') ? AKSRT_Settings::search_mode() : 'default',
'placeholder' => function_exists('aksrt_get_search_placeholder') ? aksrt_get_search_placeholder() : __('开启精彩搜索...', 'aksrt'),
'historyEnabled' => function_exists('aksrt_search_history_enabled') ? aksrt_search_history_enabled() : true,
'suggestionsEnabled' => function_exists('aksrt_search_suggestions_enabled') ? aksrt_search_suggestions_enabled() : false,
'hotKeywords' => function_exists('aksrt_get_search_hot_keywords') ? aksrt_get_search_hot_keywords() : [],
'popularTitle' => class_exists('AKSRT_Settings') ? AKSRT_Settings::search_popular_title() : __('热门搜索', 'aksrt'),
'contentTypes' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_search_content_types()['types'] : ['post', 'category', 'tag'],
'defaultType' => class_exists('AKSRT_Settings') ? AKSRT_Settings::get_search_content_types()['default'] : 'post',
],
// 用户状态
'isLoggedIn' => is_user_logged_in(),
'userId' => get_current_user_id(),
'cartUrl' => $runtime_routes['cart'],
'ordersUrl' => $runtime_routes['orders'],
'userCenterUrl' => function_exists('aksrt_get_user_center_url') ? aksrt_get_user_center_url() : home_url('/'),
'routes' => [
'home' => home_url('/'),
'login' => function_exists('aksrt_get_login_url') ? aksrt_get_login_url() : wp_login_url(),
'register' => function_exists('aksrt_get_register_url') ? aksrt_get_register_url() : wp_registration_url(),
'resetPassword' => function_exists('aksrt_get_reset_password_url') ? aksrt_get_reset_password_url() : wp_lostpassword_url(),
'profile' => function_exists('aksrt_get_user_center_url') ? aksrt_get_user_center_url() : home_url('/profile/'),
'cart' => $runtime_routes['cart'],
'orders' => $runtime_routes['orders'],
'resources' => $runtime_routes['resources'],
],
'shell' => [
'wrapperId' => '',
'navId' => 'site-nav',
'searchPanelId' => 'nav-search-panel',
'drawerId' => 'nav-drawer',
'userMenuId' => 'user-dropdown',
'floatActionsId' => 'float-right-btns',
'tabbarId' => 'footer-tabbar',
],
'themeUri' => get_template_directory_uri(),
'codeHighlight' => class_exists('AKSRT_Settings')
? AKSRT_Settings::get_code_highlight_config()
: ['enabled' => true, 'lightTheme' => 'enlighter', 'darkTheme' => 'monokai', 'lineNumbers' => false, 'showButtons' => true, 'maxHeight' => 500],
'lazyload' => class_exists('AKSRT_Settings')
? AKSRT_Settings::get_lazyload_config()
: ['enabled' => true, 'animation' => 'blur', 'placeholder_url' => '', 'blur' => true],
'systemNotice' => class_exists('AKSRT_Settings')
? AKSRT_Settings::get_system_notice_config()
: ['enabled' => false],
'contentProtect' => [
'enabled' => class_exists('AKSRT_Settings') && (bool) AKSRT_Settings::get_value('content_protect_enabled', false),
'copyNotice' => class_exists('AKSRT_Settings') && (bool) AKSRT_Settings::get_value('content_protect_copy_notice', false),
'copyNoticeText' => class_exists('AKSRT_Settings') ? (string) AKSRT_Settings::get_value('content_protect_copy_text', '来自本站,请尊重原创版权。') : '',
'disableRightClick'=> class_exists('AKSRT_Settings') && (bool) AKSRT_Settings::get_value('content_protect_right_click', false),
'detectDevTools' => class_exists('AKSRT_Settings') && (bool) AKSRT_Settings::get_value('content_protect_f12', false),
],
'translate' => class_exists('AKSRT_Settings')
? AKSRT_Settings::get_i18n_config()
: ['enabled' => false, 'autoDetect' => true, 'defaultLang' => 'zh-CN'],
]);
}
}