array(), 'version' => ADDIFECT_RENDER_ENGINE_VERSION, ); wp_enqueue_script( 'addifect-render-vendor', $vendor_url, $vendor_asset['dependencies'], $vendor_asset['version'], true ); // 2. Load Main Render Engine Asset Data $engine_asset_path = ADDIFECT_PLUGIN_PATH . 'assets/render/js/render.asset.php'; $engine_asset = file_exists( $engine_asset_path ) ? include $engine_asset_path : array( 'dependencies' => array(), 'version' => ADDIFECT_RENDER_ENGINE_VERSION, ); // Ensure our vendor script is treated as a dependency for the engine. $engine_deps = array_merge( $engine_asset['dependencies'], array( 'addifect-render-vendor' ) ); wp_enqueue_script( 'addifect-render-engine', $render_engine_url, $engine_deps, $engine_asset['version'], true ); /** * 3. Runtime Data. */ $runtime_data = array( 'assetsPath' => ADDIFECT_PLUGIN_URL . 'assets/render/js/', 'templatesUpdated' => $template_last_updated, ); wp_localize_script( 'addifect-render-engine', 'addifectRender', $runtime_data ); // Explicit Data Retrieval. $global_data = addifect_get_template( '__global' ); if ( false === $global_data || ! is_array( $global_data ) ) { $global_data = array(); } $font_version = '1'; if ( ! empty( $global_data['fontVersion'] ) ) { $font_version = (string) $global_data['fontVersion']; } /** * 5. Enqueue Google Fonts */ if ( ! empty( $global_data['fontURL'] ) ) { wp_enqueue_style( 'addifect-fonts', esc_url( $global_data['fontURL'] ), array(), $font_version ); } /** * 6. Enqueue Global CSS Variables */ if ( ! empty( $global_data['css'] ) ) { $global_css = wp_strip_all_tags( (string) $global_data['css'] ); wp_add_inline_style( 'addifect-render-styles', $global_css ); } /** * 7. Enqueue Template CSS */ // Load current template and its associated metadata. $addifect_current_template_data = addifect_get_template( $template_id ); if ( false === $addifect_current_template_data || ! is_array( $addifect_current_template_data ) ) { $addifect_current_template_data = array(); } // Build the global CSS string from main template and parts. $addifect_css = ''; if ( ! empty( $addifect_current_template_data['ssr']['css'] ) ) { $addifect_css .= $addifect_current_template_data['ssr']['css'] . "\n"; } if ( ! empty( $addifect_current_template_data['globalParts']['top'] ) ) { $addifect_header_data = addifect_get_template( $addifect_current_template_data['globalParts']['top'] ); if ( is_array( $addifect_header_data ) && ! empty( $addifect_header_data['ssr']['css'] ) ) { $addifect_css .= $addifect_header_data['ssr']['css'] . "\n"; } } if ( ! empty( $addifect_current_template_data['globalParts']['bottom'] ) ) { $addifect_footer_data = addifect_get_template( $addifect_current_template_data['globalParts']['bottom'] ); if ( is_array( $addifect_footer_data ) && ! empty( $addifect_footer_data['ssr']['css'] ) ) { $addifect_css .= $addifect_footer_data['ssr']['css'] . "\n"; } } /** * THE FINAL PUZZLE PIECE: Current Post Specific CSS * If the user is viewing a specific blog post or page, grab the * custom block styles that were generated specifically for this post's content. */ if ( is_singular() ) { $current_post_id = get_queried_object_id(); $post_css = get_post_meta( $current_post_id, '_addifect_post_css', true ); if ( ! empty( $post_css ) ) { $addifect_css .= "\n/* --- Addifect Post Content Styles --- */\n"; $addifect_css .= $post_css . "\n"; } } /** * 8. Enqueue Template CSS * We use a "virtual" handle ('addifect-style-root') with an empty source. * This ensures WordPress generates a dedicated