- Clean Inc/adsense-delay.php
- Clean Inc/category-badge.php
- Clean Inc/enqueue-scripts.php
- Clean Inc/featured-image.php
- Clean Inc/social-share.php
- Clean sidebar.php - use roi_render_component('table-of-contents')
- Add roi_get_component_setting() helper to functions-addon.php
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
548 lines
16 KiB
PHP
548 lines
16 KiB
PHP
<?php
|
|
/**
|
|
* Enqueue Bootstrap 5 and Custom Scripts
|
|
*
|
|
* @package ROI_Theme
|
|
* @since 1.0.0
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Enqueue typography system
|
|
*/
|
|
function roi_enqueue_fonts() {
|
|
// Google Fonts - Poppins (según documentación INTRODUCCION.md)
|
|
wp_enqueue_style(
|
|
'google-fonts-poppins',
|
|
'https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap',
|
|
array(),
|
|
null,
|
|
'all'
|
|
);
|
|
|
|
// Fonts CSS local
|
|
wp_enqueue_style(
|
|
'roi-fonts',
|
|
get_template_directory_uri() . '/Assets/css/css-global-fonts.css',
|
|
array('google-fonts-poppins'),
|
|
'1.0.0',
|
|
'all'
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_fonts', 1);
|
|
|
|
/**
|
|
* Enqueue Bootstrap 5 styles and scripts
|
|
*/
|
|
function roi_enqueue_bootstrap() {
|
|
// Bootstrap CSS - with high priority
|
|
wp_enqueue_style(
|
|
'roi-bootstrap',
|
|
get_template_directory_uri() . '/Assets/vendor/bootstrap/css/bootstrap.min.css',
|
|
array('roi-fonts'),
|
|
'5.3.2',
|
|
'all'
|
|
);
|
|
|
|
// Bootstrap Icons CSS - LOCAL (Issue #135: CORS bloqueaba CDN)
|
|
wp_enqueue_style(
|
|
'bootstrap-icons',
|
|
get_template_directory_uri() . '/Assets/vendor/bootstrap-icons.min.css',
|
|
array('roi-bootstrap'),
|
|
'1.11.3',
|
|
'all'
|
|
);
|
|
|
|
// Variables CSS del Template RDash (NIVEL 1 - BLOQUEANTE - Issue #48)
|
|
wp_enqueue_style(
|
|
'roi-variables',
|
|
get_template_directory_uri() . '/Assets/css/css-global-variables.css',
|
|
array('roi-bootstrap'),
|
|
ROI_VERSION,
|
|
'all'
|
|
);
|
|
|
|
// Bootstrap JS Bundle - in footer with defer
|
|
wp_enqueue_script(
|
|
'roi-bootstrap-js',
|
|
get_template_directory_uri() . '/Assets/vendor/bootstrap/js/bootstrap.bundle.min.js',
|
|
array(),
|
|
'5.3.2',
|
|
array(
|
|
'in_footer' => true,
|
|
'strategy' => 'defer',
|
|
)
|
|
);
|
|
|
|
// Dequeue jQuery if it was enqueued
|
|
wp_dequeue_script('jquery');
|
|
wp_deregister_script('jquery');
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_bootstrap', 5);
|
|
|
|
/**
|
|
* Enqueue main theme stylesheet
|
|
* FASE 1 - Este es el archivo CSS principal del tema
|
|
*/
|
|
function roi_enqueue_main_stylesheet() {
|
|
wp_enqueue_style(
|
|
'roi-main-style',
|
|
get_template_directory_uri() . '/Assets/css/style.css',
|
|
array('roi-variables'),
|
|
'1.0.5', // Arquitectura: Separación de responsabilidades CSS
|
|
'all'
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_main_stylesheet', 5);
|
|
|
|
/**
|
|
* Enqueue FASE 2 CSS - Template RDash Component Styles (Issues #58-64)
|
|
*
|
|
* Estilos que replican componentes del template RDash
|
|
*
|
|
* NOTA: Hero Section, Post Content y Related Posts ahora usan
|
|
* estilos generados dinámicamente desde sus Renderers.
|
|
*/
|
|
function roi_enqueue_fase2_styles() {
|
|
// Hero Section CSS - DESHABILITADO: estilos generados por HeroRenderer
|
|
// @see Public/Hero/Infrastructure/Ui/HeroRenderer.php
|
|
|
|
// Category Badges CSS - Clase genérica (Issue #62)
|
|
wp_enqueue_style(
|
|
'roi-badges',
|
|
get_template_directory_uri() . '/Assets/css/css-global-badges.css',
|
|
array('roi-bootstrap'),
|
|
filemtime(get_template_directory() . '/Assets/css/css-global-badges.css'),
|
|
'all'
|
|
);
|
|
|
|
// Pagination CSS - Estilos personalizados (Issue #64)
|
|
wp_enqueue_style(
|
|
'roi-pagination',
|
|
get_template_directory_uri() . '/Assets/css/css-global-pagination.css',
|
|
array('roi-bootstrap'),
|
|
filemtime(get_template_directory() . '/Assets/css/css-global-pagination.css'),
|
|
'all'
|
|
);
|
|
|
|
// Post Content Typography y Related Posts - DESHABILITADOS
|
|
// Los estilos ahora están integrados en style.css o generados dinámicamente
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_fase2_styles', 6);
|
|
|
|
/**
|
|
* Enqueue Global Components CSS
|
|
*
|
|
* ARQUITECTURA: Componentes globales que aparecen en todas las páginas
|
|
* Issue #121 - Separación de componentes del style.css
|
|
*
|
|
* @since 1.0.7
|
|
*/
|
|
function roi_enqueue_global_components() {
|
|
// Notification Bar CSS - DESHABILITADO: Los estilos de la barra de notificación ahora se generan
|
|
// dinámicamente desde el TopNotificationBarRenderer basado en los valores de la BD.
|
|
// @see Public/TopNotificationBar/Infrastructure/Ui/TopNotificationBarRenderer.php
|
|
/*
|
|
wp_enqueue_style(
|
|
'roi-notification-bar',
|
|
get_template_directory_uri() . '/Assets/css/componente-top-bar.css',
|
|
array('roi-bootstrap'),
|
|
filemtime(get_template_directory() . '/Assets/css/componente-top-bar.css'),
|
|
'all'
|
|
);
|
|
*/
|
|
|
|
// Navbar CSS - DESHABILITADO: Los estilos del navbar ahora se generan
|
|
// dinámicamente desde el NavbarRenderer basado en los valores de la BD.
|
|
// El archivo componente-navbar.css tenía !important que sobrescribía
|
|
// los estilos configurados por el usuario en el Admin Panel.
|
|
// @see Public/Navbar/Infrastructure/Ui/NavbarRenderer.php
|
|
/*
|
|
wp_enqueue_style(
|
|
'roi-navbar',
|
|
get_template_directory_uri() . '/Assets/css/componente-navbar.css',
|
|
array('roi-bootstrap'),
|
|
filemtime(get_template_directory() . '/Assets/css/componente-navbar.css'),
|
|
'all'
|
|
);
|
|
*/
|
|
|
|
// Buttons CSS - DESHABILITADO: Los estilos del botón Let's Talk ahora se generan
|
|
// dinámicamente desde el CtaLetsTalkRenderer basado en los valores de la BD.
|
|
// El archivo componente-boton-lets-talk.css tenía !important que sobrescribía
|
|
// los estilos configurados por el usuario en el Admin Panel.
|
|
// @see Public/CtaLetsTalk/Infrastructure/Ui/CtaLetsTalkRenderer.php
|
|
/*
|
|
wp_enqueue_style(
|
|
'roi-buttons',
|
|
get_template_directory_uri() . '/Assets/css/componente-boton-lets-talk.css',
|
|
array('roi-bootstrap'),
|
|
filemtime(get_template_directory() . '/Assets/css/componente-boton-lets-talk.css'),
|
|
'all'
|
|
);
|
|
*/
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_global_components', 7);
|
|
|
|
/**
|
|
* Enqueue header styles and scripts
|
|
*/
|
|
function roi_enqueue_header() {
|
|
// Header CSS
|
|
wp_enqueue_style(
|
|
'roi-header',
|
|
get_template_directory_uri() . '/Assets/css/componente-footer-principal.css',
|
|
array('roi-fonts'),
|
|
'1.0.0',
|
|
'all'
|
|
);
|
|
|
|
// Header JS - with defer strategy
|
|
wp_enqueue_script(
|
|
'roi-header-js',
|
|
get_template_directory_uri() . '/Assets/js/header.js',
|
|
array(),
|
|
'1.0.0',
|
|
array(
|
|
'in_footer' => true,
|
|
'strategy' => 'defer',
|
|
)
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_header', 10);
|
|
|
|
/**
|
|
* Enqueue generic tables styles
|
|
*
|
|
* ARQUITECTURA: Estilos para tablas genéricas en post-content
|
|
* Solo en posts individuales
|
|
*/
|
|
function roi_enqueue_generic_tables() {
|
|
// Only enqueue on single posts
|
|
if (!is_single()) {
|
|
return;
|
|
}
|
|
|
|
// Generic Tables CSS
|
|
wp_enqueue_style(
|
|
'roi-generic-tables',
|
|
get_template_directory_uri() . '/Assets/css/css-global-generic-tables.css',
|
|
array('roi-bootstrap'),
|
|
ROI_VERSION,
|
|
'all'
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_generic_tables', 11);
|
|
|
|
/**
|
|
* Enqueue video iframe styles
|
|
*
|
|
* ARQUITECTURA: Estilos para videos embebidos (YouTube, Vimeo)
|
|
* Solo en posts individuales
|
|
*/
|
|
function roi_enqueue_video_styles() {
|
|
// Only enqueue on single posts
|
|
if (!is_single()) {
|
|
return;
|
|
}
|
|
|
|
// Video CSS
|
|
wp_enqueue_style(
|
|
'roi-video',
|
|
get_template_directory_uri() . '/Assets/css/css-global-video.css',
|
|
array('roi-bootstrap'),
|
|
ROI_VERSION,
|
|
'all'
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_video_styles', 11);
|
|
|
|
/**
|
|
* Enqueue main JavaScript
|
|
*
|
|
* ELIMINADO: custom-style.css (Issue #131)
|
|
* Motivo: Archivo contenía 95% código duplicado de style.css y otros componentes
|
|
* Código único movido a: generic-tables.css, video.css
|
|
*/
|
|
function roi_enqueue_main_javascript() {
|
|
// Main JavaScript - navbar scroll effects and interactions
|
|
wp_enqueue_script(
|
|
'roi-main-js',
|
|
get_template_directory_uri() . '/Assets/js/main.js',
|
|
array('roi-bootstrap-js'),
|
|
'1.0.3', // Cache bust: force remove defer with filter
|
|
true // Load in footer
|
|
);
|
|
|
|
// Localize script to pass theme URL to JavaScript
|
|
wp_localize_script(
|
|
'roi-main-js',
|
|
'roiheme',
|
|
array(
|
|
'themeUrl' => get_template_directory_uri(),
|
|
'ajaxUrl' => admin_url('admin-ajax.php'),
|
|
)
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_main_javascript', 11);
|
|
|
|
/**
|
|
* Remove defer from roi-main-js to make wp_localize_script work
|
|
* WordPress 6.3+ adds defer automatically to footer scripts with dependencies
|
|
* but wp_localize_script requires synchronous execution
|
|
*/
|
|
function roi_remove_defer_from_main_js($tag, $handle) {
|
|
if ('roi-main-js' === $handle) {
|
|
// Remove defer and data-wp-strategy attributes
|
|
$tag = str_replace(' defer', '', $tag);
|
|
$tag = str_replace(' data-wp-strategy="defer"', '', $tag);
|
|
}
|
|
return $tag;
|
|
}
|
|
add_filter('script_loader_tag', 'roi_remove_defer_from_main_js', 20, 2);
|
|
|
|
/**
|
|
* ELIMINADO: roi_enqueue_footer_styles
|
|
* Motivo: footer.css NO está documentado - CSS debe estar en style.css
|
|
* Ver: theme-documentation/16-componente-footer-contact-form/CSS-ESPECIFICO.md
|
|
*/
|
|
|
|
/**
|
|
* Enqueue accessibility styles and scripts
|
|
*/
|
|
function roi_enqueue_accessibility() {
|
|
// Accessibility CSS
|
|
wp_enqueue_style(
|
|
'roi-accessibility',
|
|
get_template_directory_uri() . '/Assets/css/css-global-accessibility.css',
|
|
array('roi-theme-style'),
|
|
ROI_VERSION,
|
|
'all'
|
|
);
|
|
|
|
// Accessibility JavaScript
|
|
wp_enqueue_script(
|
|
'roi-accessibility-js',
|
|
get_template_directory_uri() . '/Assets/js/accessibility.js',
|
|
array('roi-bootstrap-js'),
|
|
ROI_VERSION,
|
|
array(
|
|
'in_footer' => true,
|
|
'strategy' => 'defer',
|
|
)
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_accessibility', 15);
|
|
|
|
/**
|
|
* Enqueue del script de carga retrasada de AdSense
|
|
*
|
|
* Este script se encarga de detectar la primera interacción del usuario
|
|
* (scroll, click, touch, etc.) y cargar los scripts de AdSense solo
|
|
* en ese momento, mejorando significativamente el rendimiento inicial.
|
|
*/
|
|
function roi_enqueue_adsense_loader() {
|
|
// Solo ejecutar en frontend
|
|
if (is_admin()) {
|
|
return;
|
|
}
|
|
|
|
// Verificar si el retardo de AdSense está habilitado (Clean Architecture)
|
|
$is_enabled = roi_get_component_setting('adsense-delay', 'visibility', 'is_enabled', true);
|
|
|
|
if (!$is_enabled) {
|
|
return;
|
|
}
|
|
|
|
// Enqueue del script de carga de AdSense
|
|
wp_enqueue_script(
|
|
'roi-adsense-loader',
|
|
get_template_directory_uri() . '/Assets/js/adsense-loader.js',
|
|
array(),
|
|
ROI_VERSION,
|
|
array(
|
|
'in_footer' => true,
|
|
'strategy' => 'defer',
|
|
)
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_adsense_loader', 10);
|
|
|
|
/**
|
|
* Enqueue theme core styles
|
|
*
|
|
* ELIMINADO: theme.css (Issue #125)
|
|
* Motivo: theme.css contenía código experimental y sobrescrituras Bootstrap no documentadas
|
|
* Resultado: 638 líneas eliminadas - TODO el CSS documentado va en style.css
|
|
* Fecha: 2025-01-07
|
|
*/
|
|
function roi_enqueue_theme_styles() {
|
|
// Theme Core Styles - ELIMINADO theme.css
|
|
// wp_enqueue_style(
|
|
// 'roi-theme',
|
|
// get_template_directory_uri() . '/Assets/css/theme.css',
|
|
// array('roi-bootstrap'),
|
|
// '1.0.0',
|
|
// 'all'
|
|
// );
|
|
|
|
// Theme Animations
|
|
wp_enqueue_style(
|
|
'roi-animations',
|
|
get_template_directory_uri() . '/Assets/css/css-global-animations.css',
|
|
array('roi-bootstrap'), // Cambiado de 'roi-theme' a 'roi-bootstrap'
|
|
'1.0.0',
|
|
'all'
|
|
);
|
|
|
|
// Theme Responsive Styles
|
|
wp_enqueue_style(
|
|
'roi-responsive',
|
|
get_template_directory_uri() . '/Assets/css/css-global-responsive.css',
|
|
array('roi-bootstrap'), // Cambiado de 'roi-theme' a 'roi-bootstrap'
|
|
'1.0.0',
|
|
'all'
|
|
);
|
|
|
|
// Theme Utilities
|
|
wp_enqueue_style(
|
|
'roi-utilities',
|
|
get_template_directory_uri() . '/Assets/css/css-global-utilities.css',
|
|
array('roi-bootstrap'), // Cambiado de 'roi-theme' a 'roi-bootstrap'
|
|
'1.0.0',
|
|
'all'
|
|
);
|
|
|
|
// Print Styles
|
|
wp_enqueue_style(
|
|
'roi-print',
|
|
get_template_directory_uri() . '/Assets/css/css-global-print.css',
|
|
array(),
|
|
'1.0.0',
|
|
'print'
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_theme_styles', 13);
|
|
|
|
/**
|
|
* Enqueue social share styles
|
|
*
|
|
* HABILITADO: CSS de share buttons debe estar en su propio archivo
|
|
* Arquitectura correcta: cada componente tiene su archivo CSS individual
|
|
* Ver: wp-content/themes/roi-theme/Assets/css/componente-share-buttons.css
|
|
*/
|
|
function roi_enqueue_social_share_styles() {
|
|
// Only enqueue on single posts
|
|
if (!is_single()) {
|
|
return;
|
|
}
|
|
|
|
// Social Share CSS
|
|
wp_enqueue_style(
|
|
'roi-social-share',
|
|
get_template_directory_uri() . '/Assets/css/componente-share-buttons.css',
|
|
array('roi-bootstrap'),
|
|
ROI_VERSION,
|
|
'all'
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_social_share_styles', 14);
|
|
|
|
/**
|
|
* Enqueue APU Tables styles
|
|
*/
|
|
function roi_enqueue_apu_tables_styles() {
|
|
// APU Tables CSS
|
|
wp_enqueue_style(
|
|
'roi-tables-apu',
|
|
get_template_directory_uri() . '/Assets/css/css-tablas-apu.css',
|
|
array('roi-bootstrap'),
|
|
ROI_VERSION,
|
|
'all'
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_apu_tables_styles', 15);
|
|
|
|
/**
|
|
* Enqueue APU Tables auto-class JavaScript
|
|
*
|
|
* Este script detecta automáticamente filas especiales en tablas .desglose y .analisis
|
|
* y les agrega las clases CSS correspondientes (section-header, subtotal-row, total-row)
|
|
*
|
|
* Issue #132
|
|
*/
|
|
function roi_enqueue_apu_tables_autoclass_script() {
|
|
// APU Tables Auto-Class JS
|
|
wp_enqueue_script(
|
|
'roi-apu-tables-autoclass',
|
|
get_template_directory_uri() . '/Assets/js/apu-tables-auto-class.js',
|
|
array(),
|
|
ROI_VERSION,
|
|
array(
|
|
'in_footer' => true,
|
|
'strategy' => 'defer',
|
|
)
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_apu_tables_autoclass_script', 15);
|
|
|
|
/**
|
|
* Enqueue CTA Box Sidebar styles (Issue #36)
|
|
*
|
|
* DESHABILITADO: Los estilos del CTA Box Sidebar ahora se generan
|
|
* dinámicamente desde CtaBoxSidebarRenderer basado en valores de BD.
|
|
* @see Public/CtaBoxSidebar/Infrastructure/Ui/CtaBoxSidebarRenderer.php
|
|
*/
|
|
// function roi_enqueue_cta_box_sidebar_assets() - REMOVED
|
|
|
|
/**
|
|
* Enqueue TOC Sidebar styles (only on single posts)
|
|
*
|
|
* DESHABILITADO: Los estilos del TOC ahora se generan
|
|
* dinámicamente desde TableOfContentsRenderer basado en valores de BD.
|
|
* @see Public/TableOfContents/Infrastructure/Ui/TableOfContentsRenderer.php
|
|
*
|
|
* @since 1.0.5
|
|
*/
|
|
// function roi_enqueue_toc_sidebar_assets() - REMOVED
|
|
|
|
/**
|
|
* Enqueue Footer Contact Form styles
|
|
*
|
|
* ARQUITECTURA CORRECTA: Cada componente debe tener su propio archivo CSS
|
|
* Footer Contact Form CSS ahora está en su archivo individual
|
|
* Ver: wp-content/themes/roi-theme/Assets/css/componente-footer-contact-form.css
|
|
*/
|
|
function roi_enqueue_footer_contact_assets() {
|
|
// Footer Contact CSS
|
|
wp_enqueue_style(
|
|
'roi-footer-contact',
|
|
get_template_directory_uri() . '/Assets/css/componente-footer-contact-form.css',
|
|
array('roi-bootstrap'),
|
|
ROI_VERSION,
|
|
'all'
|
|
);
|
|
}
|
|
|
|
add_action('wp_enqueue_scripts', 'roi_enqueue_footer_contact_assets', 18);
|
|
|