fix(structure): Rename assets and inc folders for Linux compatibility
- assets → Assets - inc → Inc Completes the case-sensitivity fixes for Linux servers. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
151
Inc/adsense-delay.php
Normal file
151
Inc/adsense-delay.php
Normal file
@@ -0,0 +1,151 @@
|
||||
<?php
|
||||
/**
|
||||
* AdSense Delay Loading Functionality
|
||||
*
|
||||
* Delays the loading of AdSense scripts until user interaction or timeout
|
||||
* to improve initial page load performance.
|
||||
*
|
||||
* @package ROI_Theme
|
||||
* @since 1.0.0
|
||||
*/
|
||||
|
||||
// Exit if accessed directly
|
||||
if (!defined('ABSPATH')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retarda la carga de scripts de AdSense interceptando el buffer de salida
|
||||
*
|
||||
* Esta función inicia el output buffering y reemplaza los scripts de AdSense
|
||||
* con versiones retrasadas cuando se renderiza la página.
|
||||
*/
|
||||
function roi_delay_adsense_scripts() {
|
||||
// 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;
|
||||
}
|
||||
|
||||
// Iniciar output buffering
|
||||
ob_start('roi_replace_adsense_scripts');
|
||||
}
|
||||
add_action('template_redirect', 'roi_delay_adsense_scripts', 1);
|
||||
|
||||
/**
|
||||
* Reemplaza scripts de AdSense con versiones retrasadas
|
||||
*
|
||||
* Esta función procesa la salida HTML y reemplaza las etiquetas de script
|
||||
* estándar de AdSense con versiones de carga retrasada.
|
||||
*
|
||||
* @param string $html El contenido HTML a procesar
|
||||
* @return string HTML modificado con scripts de AdSense retrasados
|
||||
*/
|
||||
function roi_replace_adsense_scripts($html) {
|
||||
// Solo procesar si hay contenido real de AdSense
|
||||
if (strpos($html, 'pagead2.googlesyndication.com') === false &&
|
||||
strpos($html, 'adsbygoogle.js') === false) {
|
||||
return $html;
|
||||
}
|
||||
|
||||
// Patrones para encontrar etiquetas de script de AdSense
|
||||
$patterns = array(
|
||||
// Buscar etiquetas de script async para AdSense
|
||||
'/<script\s+async\s+src=["\']https:\/\/pagead2\.googlesyndication\.com\/pagead\/js\/adsbygoogle\.js[^"\']*["\']\s*(?:crossorigin=["\']anonymous["\'])?\s*><\/script>/i',
|
||||
|
||||
// Buscar etiquetas de script sin async
|
||||
'/<script\s+src=["\']https:\/\/pagead2\.googlesyndication\.com\/pagead\/js\/adsbygoogle\.js[^"\']*["\']\s*(?:crossorigin=["\']anonymous["\'])?\s*><\/script>/i',
|
||||
|
||||
// Buscar scripts inline de adsbygoogle.push
|
||||
'/<script>\s*\(adsbygoogle\s*=\s*window\.adsbygoogle\s*\|\|\s*\[\]\)\.push\(\{[^}]*\}\);\s*<\/script>/is',
|
||||
);
|
||||
|
||||
// Reemplazar scripts async de AdSense con versiones retrasadas
|
||||
$replacements = array(
|
||||
// Reemplazar etiqueta de script async con atributo data para carga retrasada
|
||||
'<script type="text/plain" data-adsense-script src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" crossorigin="anonymous"></script>',
|
||||
|
||||
// Reemplazar etiqueta de script no-async
|
||||
'<script type="text/plain" data-adsense-script src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" crossorigin="anonymous"></script>',
|
||||
|
||||
// Reemplazar scripts de push inline con versiones retrasadas
|
||||
'<script type="text/plain" data-adsense-push>$0</script>',
|
||||
);
|
||||
|
||||
// Primera pasada: reemplazar etiquetas de script
|
||||
$html = preg_replace($patterns[0], $replacements[0], $html);
|
||||
$html = preg_replace($patterns[1], $replacements[1], $html);
|
||||
|
||||
// Segunda pasada: reemplazar llamadas inline de push
|
||||
$html = preg_replace_callback(
|
||||
'/<script>\s*\(adsbygoogle\s*=\s*window\.adsbygoogle\s*\|\|\s*\[\]\)\.push\(\{[^}]*\}\);\s*<\/script>/is',
|
||||
function($matches) {
|
||||
return '<script type="text/plain" data-adsense-push>' . $matches[0] . '</script>';
|
||||
},
|
||||
$html
|
||||
);
|
||||
|
||||
// Agregar comentario para indicar que se procesó (solo en modo debug)
|
||||
if (defined('WP_DEBUG') && WP_DEBUG) {
|
||||
$html = str_replace('</body>', '<!-- Scripts de AdSense retrasados por ROI Theme --></body>', $html);
|
||||
}
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
/**
|
||||
* Agrega script inline para inicializar AdSense retrasado
|
||||
*
|
||||
* Esto agrega un pequeño script inline que marca AdSense como listo para cargar
|
||||
* después de que adsense-loader.js ha sido enqueued.
|
||||
*/
|
||||
function roi_add_adsense_init_script() {
|
||||
// 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 || is_admin()) {
|
||||
return;
|
||||
}
|
||||
|
||||
?>
|
||||
<script>
|
||||
// Inicializar flag de retardo de AdSense
|
||||
window.roiAdsenseDelayed = true;
|
||||
</script>
|
||||
<?php
|
||||
}
|
||||
add_action('wp_head', 'roi_add_adsense_init_script', 1);
|
||||
|
||||
/**
|
||||
* INSTRUCCIONES DE USO:
|
||||
*
|
||||
* Para activar el retardo de carga de AdSense:
|
||||
* 1. Ir al panel de opciones del tema (Dashboard > ROI Theme Options)
|
||||
* 2. En la sección "Performance", activar la opción "Delay AdSense Loading"
|
||||
* 3. Guardar cambios
|
||||
*
|
||||
* Comportamiento:
|
||||
* - Los scripts de AdSense NO se cargarán hasta que el usuario:
|
||||
* * Haga scroll en la página
|
||||
* * Haga click en cualquier parte
|
||||
* * Toque la pantalla (móviles)
|
||||
* * Mueva el mouse
|
||||
* * Presione una tecla
|
||||
* - Si no hay interacción, los scripts se cargarán después de 5 segundos
|
||||
*
|
||||
* Beneficios:
|
||||
* - Mejora significativa en Core Web Vitals (FID, TBT)
|
||||
* - Reduce el tiempo de carga inicial de la página
|
||||
* - No afecta la monetización (los ads se siguen mostrando)
|
||||
* - Sin layout shifts al cargar los ads
|
||||
*
|
||||
* Para desactivar:
|
||||
* - Desmarcar la opción en el panel de opciones del tema
|
||||
* - Los scripts de AdSense se cargarán normalmente
|
||||
*/
|
||||
Reference in New Issue
Block a user