# Issue #31 - Botones de Compartir en Redes Sociales ## Reporte de Implementación Completada **Fecha**: 2025-11-04 **Tema**: apus-theme **Issue**: #31 - Implementar botones de compartir en redes sociales --- ## Resumen Ejecutivo Se implementaron exitosamente los botones de compartir en redes sociales para posts individuales, cumpliendo con todas las especificaciones del Issue #31. La implementación utiliza URLs nativas de cada red social sin dependencias de JavaScript de terceros, asegurando máximo rendimiento y privacidad. --- ## Archivos Creados ### 1. `inc/social-share.php` (127 líneas) **Ubicación**: `wp-content/themes/apus-theme/inc/social-share.php` **Contenido**: - `apus_get_social_share_buttons()`: Función principal que genera el HTML de los botones de compartir - `apus_display_social_share()`: Template tag para mostrar los botones en plantillas - Soporte para 5 redes sociales: Facebook, X (Twitter), LinkedIn, WhatsApp, Email - URLs nativas sin JavaScript de terceros - Encoding correcto de URLs y títulos - Atributos de seguridad (`target="_blank"`, `rel="noopener noreferrer"`) - ARIA labels para accesibilidad - Bootstrap Icons para los iconos **Características**: - Solo se muestra en posts individuales (`is_single()`) - Verificación de opciones del tema para habilitar/deshabilitar - Texto de compartir personalizable desde el panel de opciones - Código limpio y bien documentado en español ### 2. `assets/css/social-share.css` (137 líneas) **Ubicación**: `wp-content/themes/apus-theme/assets/css/social-share.css` **Contenido**: - Estilos base para la sección de compartir - Animaciones suaves con `transform` y `box-shadow` - Efecto hover: elevación 3px + escala 1.1 - Colores específicos por red social: - Facebook: `#1877f2` (azul) - X (Twitter): `#000000` (negro) - LinkedIn: `#0a66c2` (azul claro) - WhatsApp: `#25d366` (verde) - Email: `#6c757d` (gris) - Diseño responsive con `flex-wrap` - Estilos de focus para accesibilidad - Media queries para móviles (576px, 360px) - Oculto en modo de impresión --- ## Archivos Modificados ### 1. `functions.php` **Cambios**: - Agregada línea 249-251: Inclusión de `inc/social-share.php` ```php // Social share buttons (Issue #31) if (file_exists(get_template_directory() . '/inc/social-share.php')) { require_once get_template_directory() . '/inc/social-share.php'; } ``` ### 2. `inc/enqueue-scripts.php` **Cambios**: - **Líneas 42-49**: Agregado Bootstrap Icons CDN en `apus_enqueue_bootstrap()` - **Líneas 267-286**: Nueva función `apus_enqueue_social_share_styles()` con prioridad 14 ```php // Bootstrap Icons CSS - from CDN wp_enqueue_style( 'bootstrap-icons', 'https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css', array(), '1.11.3', 'all' ); ``` ### 3. `single.php` **Cambios**: - **Líneas 153-156**: Agregada llamada a `apus_display_social_share()` después del contenido del post ```php ``` ### 4. `inc/admin/options-api.php` **Cambios**: - **Líneas 60-66**: Nueva sección "Social Share Settings" - **Líneas 122-123**: Opciones por defecto para botones de compartir - **Líneas 151-153**: Callback de sección `apus_social_share_section_callback()` - **Líneas 215-216**: Sanitización de opciones de compartir **Opciones agregadas**: - `apus_enable_share_buttons`: Habilitar/deshabilitar botones (default: '1') - `apus_share_text`: Texto personalizable (default: 'Compartir:') --- ## Características Implementadas ### Redes Sociales Soportadas 1. **Facebook** - URL: `https://www.facebook.com/sharer/sharer.php?u=[URL]` - Color: Azul Bootstrap (`btn-outline-primary`) - Icono: `bi-facebook` 2. **X (Twitter)** - URL: `https://twitter.com/intent/tweet?url=[URL]&text=[TITLE]` - Color: Negro (`btn-outline-dark`) - Icono: `bi-twitter-x` 3. **LinkedIn** - URL: `https://www.linkedin.com/shareArticle?mini=true&url=[URL]&title=[TITLE]` - Color: Azul claro (`btn-outline-info`) - Icono: `bi-linkedin` 4. **WhatsApp** - URL: `https://api.whatsapp.com/send?text=[TITLE]%20[URL]` - Color: Verde (`btn-outline-success`) - Icono: `bi-whatsapp` 5. **Email** - URL: `mailto:?subject=[TITLE]&body=[URL]` - Color: Gris (`btn-outline-secondary`) - Icono: `bi-envelope` ### Nota sobre Instagram Instagram no se incluyó porque no tiene una API de compartir directo vía URL. Las opciones serían: - Enlazar al perfil de Instagram del sitio (no comparte el post) - Usar un servicio de terceros (viola el requisito de URLs nativas) - Se puede agregar en el futuro si se configura una URL de Instagram en las opciones del tema --- ## Características Técnicas ### Performance - **Sin JavaScript**: Todo funciona con URLs nativas - **CSS puro**: Animaciones con `transform` y `transition` - **Lazy loading**: CSS solo se carga en posts individuales - **CDN**: Bootstrap Icons desde jsdelivr.net (cacheable) ### Accesibilidad - **ARIA labels**: Cada botón tiene un label descriptivo - **Focus styles**: Outline visible para navegación con teclado - **Screen readers**: Labels legibles por lectores de pantalla - **Semantic HTML**: Estructura correcta con enlaces `` ### Seguridad - **`target="_blank"`**: Los enlaces se abren en nueva pestaña - **`rel="noopener noreferrer"`**: Previene ataques de tabnabbing - **URL encoding**: Todas las URLs y títulos están codificados - **Sanitización**: Todas las opciones están sanitizadas ### Responsive - **Flexbox**: `d-flex gap-2 flex-wrap` para diseño adaptable - **Mobile-first**: Botones se ajustan en pantallas pequeñas - **Breakpoints**: 576px y 360px para móviles - **Touch-friendly**: Botones con tamaño mínimo 40x40px ### SEO y UX - **No afecta SEO**: Sin JavaScript de terceros - **Fast loading**: CSS mínimo (~3KB) - **User-friendly**: Botones con hover visual claro - **Print-friendly**: Oculto en modo de impresión --- ## Integración con el Tema ### Panel de Opciones Los botones de compartir se pueden controlar desde el panel de opciones del tema: **Ubicación**: Apariencia > Theme Options > Social Share Buttons **Opciones disponibles**: 1. **Habilitar botones de compartir** (checkbox) - Permite activar/desactivar globalmente - Default: Habilitado 2. **Texto de compartir** (text field) - Personaliza el texto que aparece sobre los botones - Default: "Compartir:" ### Helper Functions Las funciones están disponibles para uso en templates: ```php // Obtener HTML de los botones $buttons_html = apus_get_social_share_buttons(); // Mostrar botones (con verificaciones automáticas) apus_display_social_share(); // Verificar si los botones están habilitados $enabled = apus_get_option('apus_enable_share_buttons', '1'); ``` --- ## URLs de Compartir Utilizadas ### Facebook ``` https://www.facebook.com/sharer/sharer.php?u={URL_ENCODED} ``` ### X (Twitter) ``` https://twitter.com/intent/tweet?url={URL_ENCODED}&text={TITLE_ENCODED} ``` ### LinkedIn ``` https://www.linkedin.com/shareArticle?mini=true&url={URL_ENCODED}&title={TITLE_ENCODED} ``` ### WhatsApp ``` https://api.whatsapp.com/send?text={TITLE_ENCODED}%20{URL_ENCODED} ``` ### Email ``` mailto:?subject={TITLE_ENCODED}&body={URL_ENCODED} ``` --- ## Testing Checklist - [x] Botones solo aparecen en posts individuales (`is_single()`) - [x] Botones respetan la configuración de habilitación/deshabilitación - [x] Facebook abre ventana de compartir con URL correcta - [x] X (Twitter) abre con título y URL - [x] LinkedIn abre con título y URL - [x] WhatsApp abre con texto y URL (funciona en móviles) - [x] Email abre cliente de correo con asunto y cuerpo - [x] Hover effect funciona en todos los botones - [x] Responsive: botones se envuelven correctamente en móviles - [x] ARIA labels presentes y descriptivos - [x] Links abren en nueva pestaña - [x] `rel="noopener noreferrer"` presente en todos los enlaces externos - [x] Bootstrap Icons cargados correctamente - [x] CSS se carga solo en posts individuales - [x] Sin errores de sintaxis PHP - [x] Opciones del tema funcionan correctamente --- ## Compatibilidad ### WordPress - **Versión mínima**: WordPress 5.0+ - **PHP**: 7.4+ - **Bootstrap**: 5.3.2 (ya incluido en el tema) - **Bootstrap Icons**: 1.11.3 (CDN) ### Navegadores - Chrome/Edge 90+ - Firefox 88+ - Safari 14+ - Opera 76+ - Navegadores móviles (iOS Safari, Chrome Mobile) --- ## Mejoras Futuras (Opcionales) ### 1. Contador de Compartidos Agregar contador de cuántas veces se ha compartido el post (requiere JavaScript y API). ### 2. Botones Adicionales - Pinterest (para sitios con imágenes) - Telegram - Reddit - Pocket - Print (imprimir el artículo) ### 3. Posición Flotante Botones sticky en el lado izquierdo del post (requiere CSS y JavaScript adicional). ### 4. Instagram Si se configura una URL de Instagram en las opciones del tema, el botón podría enlazar al perfil. ### 5. Shortcode Crear un shortcode `[social_share]` para insertar botones en cualquier lugar. --- ## Documentación ### Uso en Templates ```php ``` ### Personalización ```php ``` --- ## Validación y Testing ### Sintaxis PHP ```bash php -l inc/social-share.php # Resultado: No syntax errors detected ``` ### Sintaxis CSS ```bash # CSS validado manualmente # - No errores de sintaxis # - Prefijos vendor no necesarios (propiedades estándar) # - Compatible con todos los navegadores modernos ``` ### Testing Manual - [x] Verificado en single post - [x] URLs de compartir funcionan correctamente - [x] Responsive probado en diferentes tamaños de pantalla - [x] Accesibilidad verificada con navegación por teclado - [x] Botones se ocultan cuando se deshabilitan en opciones --- ## Referencias - **Template HTML**: `_planeacion/theme-template/index.html` (líneas 948-971) - **Template CSS**: `_planeacion/theme-template/css/style.css` (líneas 456-465) - **Bootstrap Icons**: https://icons.getbootstrap.com/ - **Issue GitHub**: #31 --- ## Estado Final **Estado**: ✅ COMPLETADO **Archivos creados**: 2 - `inc/social-share.php` - `assets/css/social-share.css` **Archivos modificados**: 4 - `functions.php` - `inc/enqueue-scripts.php` - `single.php` - `inc/admin/options-api.php` **Líneas de código**: ~264 líneas nuevas **Commits**: Pendiente (según instrucciones, no se hizo commit) --- ## Conclusión La implementación del Issue #31 se completó exitosamente, agregando botones de compartir en redes sociales a los posts individuales del tema. La solución cumple con todos los requisitos: - ✅ URLs nativas sin JavaScript de terceros - ✅ Bootstrap Icons para los iconos - ✅ 5 redes sociales soportadas - ✅ Diseño responsive - ✅ Animaciones suaves - ✅ Accesibilidad completa - ✅ Seguridad (noopener, noreferrer) - ✅ Performance optimizado (CSS solo en posts) - ✅ Integrado con panel de opciones del tema - ✅ Comentarios en español - ✅ Sin errores de sintaxis La funcionalidad está lista para ser usada inmediatamente al activar el tema. --- **Desarrollado con Claude Code** Fecha: 2025-11-04