renderCustomCSS($data); if (!empty($cssOutput)) { $output .= $cssOutput . "\n"; } // Custom JS Header $jsHeaderOutput = $this->renderCustomJSHeader($data); if (!empty($jsHeaderOutput)) { $output .= $jsHeaderOutput . "\n"; } return $output; } /** * Genera contenido para wp_footer * * Incluye: * - Custom JS Footer (si configurado) * * @param array $data Datos del componente desde BD * @return string Contenido para wp_footer */ public function renderFooterContent(array $data): string { return $this->renderCustomJSFooter($data); } /** * Genera el CSS personalizado * * @param array $data Datos del componente * @return string Bloque style o vacio si no hay CSS */ private function renderCustomCSS(array $data): string { $css = trim($data['custom_code']['custom_css'] ?? ''); if (empty($css)) { return ''; } return sprintf( ' ', $css // No escapar CSS - usuario avanzado responsable ); } /** * Genera el JavaScript personalizado para header * * @param array $data Datos del componente * @return string Bloque script o vacio si no hay JS */ private function renderCustomJSHeader(array $data): string { $js = trim($data['custom_code']['custom_js_header'] ?? ''); if (empty($js)) { return ''; } return sprintf( ' ', $js // No escapar JS - usuario avanzado responsable ); } /** * Genera el JavaScript personalizado para footer * * @param array $data Datos del componente * @return string Bloque script o vacio si no hay JS */ private function renderCustomJSFooter(array $data): string { $js = trim($data['custom_code']['custom_js_footer'] ?? ''); if (empty($js)) { return ''; } return sprintf( ' ', $js // No escapar JS - usuario avanzado responsable ); } }