You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* 资源加载管理器
* 用于管理和加载项目所需的CSS、JS等资源文件
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
/**
* 加载前端资源
*/
function load_theme_assets() {
// 获取主题目录URL和路径
$theme_url = get_template_directory_uri();
$theme_path = get_template_directory();
// 确保使用WordPress内置的jQuery
wp_enqueue_script('jquery');
// 安全加载CSS文件
$css_files = array(
'theme-reset-css' => '/assets/css/reset.css',
'font-awesome' => '/assets/fontawesome/css/all.min.css',
'theme-header-css' => '/assets/css/header.css',
'theme-index-css' => '/assets/css/index.css',
'animate-css' => '/assets/css/animate.min.css',
'custom-animations' => '/assets/css/animations.css',
'scroll-animations-css' => '/assets/css/scroll-animations.css',
'smooth-scroll-css' => '/assets/css/smooth-scroll.css',
'search-css' => '/assets/css/search.css',
'navigation-menu-css' => '/assets/css/navigation-menu.css',
'footer-css' => '/assets/css/footer.css',
// 'video-banner-css' => '/assets/css/video-banner.css', // 移除全局加载,改为按需加载
'products-services-css' => '/assets/css/products-services.css',
'features-css' => '/assets/css/features.css',
'solution-css' => '/assets/css/solution.css',
'block-news-css' => '/assets/css/block-news.css',
'article-display-css' => '/assets/css/article-display.css',
'single-sidebar-css' => '/assets/css/single-sidebar.css',
'simple-carousel-css' => '/assets/css/simple-carousel.css',
'about-timeline-css' => '/assets/css/about-timeline.css',
'social-activities-css' => '/assets/css/social-activities.css',
'business-process-css' => '/assets/css/business-process.css',
// 'henghui-core-css' => '/assets/css/henghui-core.css' // 移至页面单独加载
);
foreach ($css_files as $handle => $file_path) {
// 在生产环境中跳过文件检查以提高性能
if ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists($theme_path . $file_path)) {
wp_enqueue_style($handle, $theme_url . $file_path, array(), '1.0.0');
} elseif (defined('WP_DEBUG') && WP_DEBUG) {
error_log('Missing CSS file: ' . $theme_path . $file_path);
}
}
// 安全加载JavaScript文件 - 优化GSAP和Swiper兼容性
$js_files = array(
// 基础库 - 最先加载
'smoothscroll' => array('file' => '/assets/js/smoothscroll.min.js', 'deps' => array(), 'ver' => '1.4.10'),
'smooth-scroll-init' => array('file' => '/assets/js/smooth-scroll-init.js', 'deps' => array('smoothscroll'), 'ver' => '1.0.0'),
// GSAP核心库 - 已启用,优化加载顺序
'gsap' => array('file' => '/assets/js/gsap.min.js', 'deps' => array('jquery'), 'ver' => '3.12.2'),
'gsap-scrolltrigger' => array('file' => '/assets/js/ScrollTrigger.min.js', 'deps' => array('gsap'), 'ver' => '3.12.2'),
'gsap-textplugin' => array('file' => '/assets/js/TextPlugin.min.js', 'deps' => array('gsap'), 'ver' => '3.12.2'),
// GSAP与Elementor兼容性管理器 - 必须在所有GSAP相关脚本之后加载
'gsap-elementor-compatibility' => array('file' => '/assets/js/gsap-elementor-compatibility.js', 'deps' => array('gsap', 'gsap-scrolltrigger', 'gsap-textplugin'), 'ver' => '1.0.1'),
// GSAP与Elementor初始化管理器 - 确保正确的初始化顺序
'gsap-elementor-init' => array('file' => '/assets/js/gsap-elementor-init.js', 'deps' => array('gsap-elementor-compatibility'), 'ver' => '1.0.0'),
// 滚动动画系统 - 基于GSAP ScrollTrigger的动画控制器
'scroll-animations' => array('file' => '/assets/js/scroll-animations.js', 'deps' => array('gsap', 'gsap-scrolltrigger', 'gsap-elementor-init'), 'ver' => '1.0.0'),
// Elementor调试工具 - 仅在调试模式下加载
'elementor-debug' => array('file' => '/assets/js/elementor-debug.js', 'deps' => array('gsap-elementor-compatibility'), 'ver' => '1.0.0'),
// 组件脚本 - GSAP依赖配置确保兼容性管理器优先加载
// 'video-banner-js' => array('file' => '/assets/js/video-banner.js', 'deps' => array('jquery', 'gsap'), 'ver' => '1.0.0'), // 移除全局加载,改为按需加载
'products-services-js' => array('file' => '/assets/js/products-services.js', 'deps' => array('jquery', 'gsap-elementor-init'), 'ver' => '1.0.0'),
'features-js' => array('file' => '/assets/js/features.js', 'deps' => array('jquery', 'gsap-elementor-init'), 'ver' => '1.0.0'),
'solution-js' => array('file' => '/assets/js/solution.js', 'deps' => array('jquery', 'gsap-elementor-init'), 'ver' => '1.0.0'),
'search-js' => array('file' => '/assets/js/search.js', 'deps' => array('jquery', 'gsap-elementor-init'), 'ver' => '1.0.0'),
// 其他独立库
'tinytyper' => array('file' => '/assets/js/tinytyper.min.js', 'deps' => array('jquery'), 'ver' => '1.0.0'),
// SimpleCarousel库 - 轻量级轮播组件
'simple-carousel-js' => array('file' => '/assets/js/simple-carousel.js', 'deps' => array('jquery'), 'ver' => '1.0.0'),
// 区块组件脚本
'about-timeline-js' => array('file' => '/assets/js/about-timeline.js', 'deps' => array('jquery', 'simple-carousel-js'), 'ver' => '1.0.0'),
'social-activities-js' => array('file' => '/assets/js/social-activities.js', 'deps' => array('jquery', 'simple-carousel-js'), 'ver' => '1.0.0'),
'business-process-js' => array('file' => '/assets/js/business-process.js', 'deps' => array('jquery'), 'ver' => '1.0.0'),
// 'professional-fields-js' => array('file' => '/assets/js/professional-fields.js', 'deps' => array('jquery', 'simple-carousel-js'), 'ver' => '1.0.0'), // 移至页面单独加载
// 'henghui-core-js' => array('file' => '/assets/js/henghui-core.js', 'deps' => array('jquery', 'gsap', 'gsap-scrolltrigger', 'simple-carousel-js'), 'ver' => '1.0.0'), // 移至页面单独加载
// 主题脚本
'dropdown-menu-js' => array('file' => '/assets/js/dropdown-menu.js', 'deps' => array('jquery'), 'ver' => '1.0.0'),
'theme-index-js' => array('file' => '/assets/js/index.js', 'deps' => array('jquery', 'tinytyper'), 'ver' => '1.0.0')
);
foreach ($js_files as $handle => $config) {
// 调试工具只在调试模式下加载
if ($handle === 'elementor-debug' && !isset($_GET['debug'])) {
continue;
}
// 在生产环境中跳过文件检查以提高性能
if ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists($theme_path . $config['file'])) {
wp_enqueue_script($handle, $theme_url . $config['file'], $config['deps'], $config['ver'], true);
} elseif (defined('WP_DEBUG') && WP_DEBUG) {
error_log('Missing JS file: ' . $theme_path . $config['file']);
}
}
// 为主题JS文件传递一些有用的数据
wp_localize_script('theme-index-js', 'themeData', array(
'ajaxUrl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('theme_nonce'),
'themeUrl' => $theme_url
));
}
add_action('wp_enqueue_scripts', 'load_theme_assets');
/**
* 加载后台管理资源
*/
function load_admin_assets($hook) {
$theme_url = get_template_directory_uri();
// 加载后台CSS
wp_enqueue_style('theme-admin-css', $theme_url . '/assets/css/admin.css', array(), '1.0.0');
}
add_action('admin_enqueue_scripts', 'load_admin_assets');
/**
* 优化资源加载性能
*/
function optimize_asset_loading() {
// 移除WordPress默认的jQuery使用我们自己的版本如果需要
// wp_deregister_script('jquery');
// 添加资源预加载提示
echo '<link rel="preload" href="' . get_template_directory_uri() . '/assets/js/gsap.min.js" as="script">';
echo '<link rel="preload" href="' . get_template_directory_uri() . '/assets/css/index.css" as="style">';
}
add_action('wp_head', 'optimize_asset_loading', 1);
/**
* 添加资源版本控制
*/
function add_asset_version($src, $handle) {
// 为本地资源添加文件修改时间作为版本号
if (strpos($src, get_template_directory_uri()) !== false) {
// 开发模式下检查文件修改时间生产模式直接使用主题版本号减少IO操作
if (defined('WP_DEBUG') && WP_DEBUG) {
$file_path = str_replace(get_template_directory_uri(), get_template_directory(), $src);
if (file_exists($file_path)) {
$version = filemtime($file_path);
$src = add_query_arg('v', $version, $src);
}
} else {
// 生产环境使用主题版本号
$theme = wp_get_theme();
$src = add_query_arg('v', $theme->get('Version'), $src);
}
}
return $src;
}
add_filter('style_loader_src', 'add_asset_version', 10, 2);
add_filter('script_loader_src', 'add_asset_version', 10, 2);
/**
* 条件加载资源
* 根据页面类型加载不同的资源
*/
function conditional_asset_loading() {
$theme_url = get_template_directory_uri();
// 仅在首页加载特定的动画资源(文件存在时)
if (is_front_page() && ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists(get_template_directory() . '/assets/js/homepage-animations.js'))) {
wp_enqueue_script('homepage-animations', $theme_url . '/assets/js/homepage-animations.js', array('gsap'), '1.0.0', true);
}
// 仅在单篇文章页面加载相关资源(文件存在时)
if (is_single() && ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists(get_template_directory() . '/assets/js/single-post.js'))) {
wp_enqueue_script('single-post-enhancements', $theme_url . '/assets/js/single-post.js', array('gsap'), '1.0.0', true);
}
// 恒辉核心页面专用脚本
if (is_page_template('page-henghui-core.php')) {
if ((!defined('WP_DEBUG') || !WP_DEBUG) || file_exists(get_template_directory() . '/assets/js/henghui-core.js')) {
wp_enqueue_script('henghui-core-js', $theme_url . '/assets/js/henghui-core.js', array('jquery'), '1.0.0', true);
}
}
}
add_action('wp_enqueue_scripts', 'conditional_asset_loading', 20);
/**
* 内联关键CSS可选
*/
function inline_critical_css() {
$critical_css_file = get_template_directory() . '/assets/css/critical.css';
if (file_exists($critical_css_file)) {
echo '<style id="critical-css">';
echo file_get_contents($critical_css_file);
echo '</style>';
}
}
// add_action('wp_head', 'inline_critical_css', 2);
/**
* 资源完整性检查
*/
function check_asset_integrity() {
// 仅在调试模式下检查避免生产环境产生不必要的IO开销
if (!defined('WP_DEBUG') || !WP_DEBUG) {
return;
}
$required_assets = array(
get_template_directory() . '/assets/js/gsap.min.js',
get_template_directory() . '/assets/js/index.js',
get_template_directory() . '/assets/css/index.css'
);
foreach ($required_assets as $asset) {
if (!file_exists($asset)) {
error_log('Missing required asset: ' . $asset);
}
}
}
add_action('init', 'check_asset_integrity');
?>