'; $html .= '
'; $html .= '
'; $html .= '

'; $html .= ' '; $html .= ' AdSense y Analytics'; $html .= '

'; $html .= '

'; $html .= ' Configura Google AdSense y Google Analytics'; $html .= '

'; $html .= '
'; $html .= '
'; $html .= ''; // LAYOUT 2 COLUMNAS $html .= '
'; // COLUMNA IZQUIERDA $html .= '
'; $html .= $this->buildVisibilityGroup($componentId); $html .= $this->buildAnalyticsGroup($componentId); $html .= $this->buildCredentialsGroup($componentId); $html .= $this->buildPostLocationsGroup($componentId); $html .= '
'; // COLUMNA DERECHA $html .= '
'; $html .= $this->buildRailAdsGroup($componentId); $html .= $this->buildArchiveLocationsGroup($componentId); $html .= $this->buildExclusionsGroup($componentId); $html .= '
'; $html .= '
'; return $html; } private function buildVisibilityGroup(string $cid): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Activacion AdSense'; $html .= '
'; // Switch: Enabled $enabled = $this->renderer->getFieldValue($cid, 'visibility', 'is_enabled', false); $html .= $this->buildSwitch($cid . 'Enabled', 'Activar AdSense', $enabled, 'bi-power'); // Switch: Show on Mobile $showMobile = $this->renderer->getFieldValue($cid, 'visibility', 'show_on_mobile', true); $html .= $this->buildSwitch($cid . 'ShowOnMobile', 'Mostrar en movil', $showMobile, 'bi-phone'); // Switch: Show on Desktop $showDesktop = $this->renderer->getFieldValue($cid, 'visibility', 'show_on_desktop', true); $html .= $this->buildSwitch($cid . 'ShowOnDesktop', 'Mostrar en escritorio', $showDesktop, 'bi-display'); $html .= '
'; $html .= '
'; return $html; } private function buildAnalyticsGroup(string $cid): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Google Analytics'; $html .= '
'; // Switch: Analytics Enabled $analyticsEnabled = $this->renderer->getFieldValue($cid, 'analytics', 'analytics_enabled', false); $html .= $this->buildSwitch($cid . 'AnalyticsEnabled', 'Activar Analytics', $analyticsEnabled, 'bi-power'); // Tracking ID $gaTrackingId = $this->renderer->getFieldValue($cid, 'analytics', 'ga_tracking_id', ''); $html .= $this->buildTextInput($cid . 'GaTrackingId', 'Google Analytics ID', $gaTrackingId, 'G-XXXXXXXXXX'); $html .= '
Formato: G-XXXXXXXXXX o UA-XXXXXXXX-X
'; // Anonymize IP $gaAnonymizeIp = $this->renderer->getFieldValue($cid, 'analytics', 'ga_anonymize_ip', true); $html .= $this->buildSwitch($cid . 'GaAnonymizeIp', 'Anonimizar IP (GDPR)', $gaAnonymizeIp, 'bi-shield-check'); $html .= '
'; $html .= ' '; $html .= ' Recomendado activar para cumplir con GDPR/RGPD'; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildCredentialsGroup(string $cid): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Credenciales AdSense'; $html .= '
'; // Publisher ID $pubId = $this->renderer->getFieldValue($cid, 'content', 'publisher_id', 'ca-pub-8476420265998726'); $html .= $this->buildTextInput($cid . 'PublisherId', 'Publisher ID', $pubId, 'ca-pub-XXXXX'); // Slots (grid 2 columnas) $html .= '
'; $html .= '
'; $slotDisplay = $this->renderer->getFieldValue($cid, 'content', 'slot_display', '2873062302'); $html .= $this->buildTextInput($cid . 'SlotDisplay', 'Slot Display', $slotDisplay); $html .= '
'; $html .= '
'; $slotAuto = $this->renderer->getFieldValue($cid, 'content', 'slot_auto', '8471732096'); $html .= $this->buildTextInput($cid . 'SlotAuto', 'Slot Auto', $slotAuto); $html .= '
'; $html .= '
'; $slotRelaxed = $this->renderer->getFieldValue($cid, 'content', 'slot_autorelaxed', '9205569855'); $html .= $this->buildTextInput($cid . 'SlotAutorelaxed', 'Slot Autorelaxed', $slotRelaxed); $html .= '
'; $html .= '
'; $slotInArticle = $this->renderer->getFieldValue($cid, 'content', 'slot_inarticle', '7285187368'); $html .= $this->buildTextInput($cid . 'SlotInarticle', 'Slot In-Article', $slotInArticle); $html .= '
'; $html .= '
'; $slotSkyscraper = $this->renderer->getFieldValue($cid, 'content', 'slot_skyscraper', ''); $html .= $this->buildTextInput($cid . 'SlotSkyscraper', 'Slot Skyscraper (Rail Ads)', $slotSkyscraper); $html .= '
'; $html .= '
'; $html .= '
'; $html .= '
'; return $html; } private function buildPostLocationsGroup(string $cid): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Ubicaciones en Posts'; $html .= '
'; // Post Top $postTopEnabled = $this->renderer->getFieldValue($cid, 'behavior', 'post_top_enabled', true); $html .= $this->buildSwitch($cid . 'PostTopEnabled', 'Despues de Featured Image', $postTopEnabled); $html .= $this->buildSelect($cid . 'PostTopFormat', 'Formato', $this->renderer->getFieldValue($cid, 'behavior', 'post_top_format', 'auto'), ['auto' => 'Auto (responsive)', 'in-article' => 'In-Article', 'display' => 'Display (728x90)', 'display-large' => 'Display Large (970x250)'] ); // Post Content $postContentEnabled = $this->renderer->getFieldValue($cid, 'behavior', 'post_content_enabled', false); $html .= $this->buildSwitch($cid . 'PostContentEnabled', 'Insertar dentro del contenido', $postContentEnabled); $html .= '
'; $html .= '
'; $afterPara = $this->renderer->getFieldValue($cid, 'behavior', 'post_content_after_paragraphs', '3'); $html .= $this->buildTextInput($cid . 'PostContentAfterParagraphs', 'Despues parrafo #', $afterPara); $html .= '
'; $html .= '
'; $maxAds = $this->renderer->getFieldValue($cid, 'behavior', 'post_content_max_ads', '2'); $html .= $this->buildTextInput($cid . 'PostContentMaxAds', 'Max ads', $maxAds); $html .= '
'; $html .= '
'; $html .= $this->buildSelect($cid . 'PostContentFormat', 'Formato', $this->renderer->getFieldValue($cid, 'behavior', 'post_content_format', 'in-article'), ['in-article' => 'In-Article', 'auto' => 'Auto'] ); $html .= '
'; $html .= '
'; // Post Bottom $postBottomEnabled = $this->renderer->getFieldValue($cid, 'behavior', 'post_bottom_enabled', true); $html .= $this->buildSwitch($cid . 'PostBottomEnabled', 'Despues del contenido', $postBottomEnabled); $html .= $this->buildSelect($cid . 'PostBottomFormat', 'Formato', $this->renderer->getFieldValue($cid, 'behavior', 'post_bottom_format', 'auto'), ['auto' => 'Auto', 'in-article' => 'In-Article', 'display' => 'Display'] ); // After Related $afterRelatedEnabled = $this->renderer->getFieldValue($cid, 'behavior', 'after_related_enabled', false); $html .= $this->buildSwitch($cid . 'AfterRelatedEnabled', 'Despues de Related Posts', $afterRelatedEnabled); $html .= $this->buildSelect($cid . 'AfterRelatedFormat', 'Formato', $this->renderer->getFieldValue($cid, 'behavior', 'after_related_format', 'autorelaxed'), ['autorelaxed' => 'Autorelaxed', 'auto' => 'Auto'] ); $html .= '
'; $html .= '
'; return $html; } private function buildRailAdsGroup(string $cid): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Rail Ads (Margenes Laterales)'; $html .= '
'; $html .= '

Anuncios fijos en los espacios laterales del viewport. Solo visibles en pantallas >= 1600px.

'; // Master switch $railEnabled = $this->renderer->getFieldValue($cid, 'behavior', 'rail_ads_enabled', false); $html .= $this->buildSwitch($cid . 'RailAdsEnabled', 'Activar Rail Ads', $railEnabled, 'bi-power'); // Left/Right toggles $html .= '
'; $html .= '
'; $leftEnabled = $this->renderer->getFieldValue($cid, 'behavior', 'rail_left_enabled', true); $html .= $this->buildSwitch($cid . 'RailLeftEnabled', 'Rail izquierdo', $leftEnabled); $html .= '
'; $html .= '
'; $rightEnabled = $this->renderer->getFieldValue($cid, 'behavior', 'rail_right_enabled', true); $html .= $this->buildSwitch($cid . 'RailRightEnabled', 'Rail derecho', $rightEnabled); $html .= '
'; $html .= '
'; // Format select $railFormat = $this->renderer->getFieldValue($cid, 'behavior', 'rail_format', 'skyscraper'); $html .= $this->buildSelect($cid . 'RailFormat', 'Formato', $railFormat, ['skyscraper' => 'Skyscraper (160x600)', 'half-page' => 'Half Page (300x600)'] ); // Top offset $topOffset = $this->renderer->getFieldValue($cid, 'behavior', 'rail_top_offset', '150'); $html .= $this->buildTextInput($cid . 'RailTopOffset', 'Distancia desde arriba (px)', $topOffset); $html .= '
'; $html .= '
'; return $html; } private function buildArchiveLocationsGroup(string $cid): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Ubicaciones Archives/Globales'; $html .= '
'; // Archive locations $archiveTopEnabled = $this->renderer->getFieldValue($cid, 'layout', 'archive_top_enabled', false); $html .= $this->buildSwitch($cid . 'ArchiveTopEnabled', 'Arriba del listado', $archiveTopEnabled); $archiveBetweenEnabled = $this->renderer->getFieldValue($cid, 'layout', 'archive_between_enabled', false); $html .= $this->buildSwitch($cid . 'ArchiveBetweenEnabled', 'Entre posts del listado', $archiveBetweenEnabled); $archiveEvery = $this->renderer->getFieldValue($cid, 'layout', 'archive_between_every', '4'); $html .= $this->buildTextInput($cid . 'ArchiveBetweenEvery', 'Mostrar cada X posts', $archiveEvery); $archiveBottomEnabled = $this->renderer->getFieldValue($cid, 'layout', 'archive_bottom_enabled', false); $html .= $this->buildSwitch($cid . 'ArchiveBottomEnabled', 'Abajo del listado', $archiveBottomEnabled); // Archive format (aplica a todas las ubicaciones archive) $html .= $this->buildSelect($cid . 'ArchiveFormat', 'Formato para archives', $this->renderer->getFieldValue($cid, 'layout', 'archive_format', 'autorelaxed'), ['autorelaxed' => 'Autorelaxed', 'auto' => 'Auto'] ); $html .= '
'; $html .= '

Ubicaciones Globales

'; // Global locations $headerBelowEnabled = $this->renderer->getFieldValue($cid, 'layout', 'header_below_enabled', false); $html .= $this->buildSwitch($cid . 'HeaderBelowEnabled', 'Debajo del header (global)', $headerBelowEnabled); $footerAboveEnabled = $this->renderer->getFieldValue($cid, 'layout', 'footer_above_enabled', false); $html .= $this->buildSwitch($cid . 'FooterAboveEnabled', 'Arriba del footer (global)', $footerAboveEnabled); // Global format $html .= $this->buildSelect($cid . 'GlobalFormat', 'Formato para globales', $this->renderer->getFieldValue($cid, 'layout', 'global_format', 'auto'), ['auto' => 'Auto', 'display-large' => 'Display Large (970x250)'] ); $html .= '
'; $html .= '
'; return $html; } private function buildExclusionsGroup(string $cid): string { $html = '
'; $html .= '
'; $html .= '
'; $html .= ' '; $html .= ' Exclusiones y Rendimiento'; $html .= '
'; // Exclusions $excludeCats = $this->renderer->getFieldValue($cid, 'forms', 'exclude_categories', ''); $html .= $this->buildTextarea($cid . 'ExcludeCategories', 'Excluir categorias (IDs)', $excludeCats, 'Ej: 5,12,23'); $excludeTypes = $this->renderer->getFieldValue($cid, 'forms', 'exclude_post_types', ''); $html .= $this->buildTextarea($cid . 'ExcludePostTypes', 'Excluir tipos de post', $excludeTypes, 'Ej: page,attachment'); $excludeIds = $this->renderer->getFieldValue($cid, 'forms', 'exclude_post_ids', ''); $html .= $this->buildTextarea($cid . 'ExcludePostIds', 'Excluir posts (IDs)', $excludeIds, 'Ej: 100,205,310'); $minLength = $this->renderer->getFieldValue($cid, 'forms', 'min_content_length', '500'); $html .= $this->buildTextInput($cid . 'MinContentLength', 'Longitud minima de contenido', $minLength); // Delay settings $delayEnabled = $this->renderer->getFieldValue($cid, 'forms', 'delay_enabled', true); $html .= $this->buildSwitch($cid . 'DelayEnabled', 'Retrasar carga de anuncios', $delayEnabled, 'bi-hourglass-split'); $delayTimeout = $this->renderer->getFieldValue($cid, 'forms', 'delay_timeout', '5000'); $html .= $this->buildTextInput($cid . 'DelayTimeout', 'Timeout de delay (ms)', $delayTimeout); $html .= '
'; $html .= '
'; return $html; } // === HELPERS === private function buildSwitch(string $id, string $label, $value, string $icon = ''): string { $checked = checked($value, true, false); $iconHtml = $icon ? '' : ''; return sprintf( '
', esc_attr($id), $checked, esc_attr($id), $iconHtml, esc_html($label) ); } private function buildTextInput(string $id, string $label, string $value, string $placeholder = ''): string { return sprintf( '
', esc_attr($id), esc_html($label), esc_attr($id), esc_attr($value), esc_attr($placeholder) ); } private function buildTextarea(string $id, string $label, string $value, string $placeholder = ''): string { return sprintf( '
', esc_attr($id), esc_html($label), esc_attr($id), esc_attr($placeholder), esc_textarea($value) ); } private function buildSelect(string $id, string $label, string $value, array $options): string { $optionsHtml = ''; foreach ($options as $optValue => $optLabel) { $selected = selected($value, $optValue, false); $optionsHtml .= sprintf( '', esc_attr($optValue), $selected, esc_html($optLabel) ); } return sprintf( '
', esc_attr($id), esc_html($label), esc_attr($id), $optionsHtml ); } }