# Related Posts - Documentación Técnica ## Descripción General Sistema de posts relacionados completamente configurable que muestra automáticamente posts similares al final de cada artículo individual basándose en categorías compartidas. ## Archivos Creados ### 1. `inc/related-posts.php` (294 líneas) Archivo principal con toda la lógica de posts relacionados: #### Funciones Principales: - **`apus_get_related_posts($post_id)`** - Obtiene posts relacionados por categoría - Retorna: `WP_Query|false` - Parámetros configurables vía `get_option()` - Optimizado con `no_found_rows` y desactivación de cache - **`apus_display_related_posts($post_id = null)`** - Renderiza el HTML completo de posts relacionados - Grid responsive con Bootstrap 5 - Soporte para posts con y sin imagen destacada - Fondos de color para posts sin imagen - **`apus_get_column_class($columns)`** - Calcula clases de columna de Bootstrap según configuración - Soporta: 1, 2, 3 o 4 columnas - Retorna clases responsive (col-12, col-md-6, etc.) - **`apus_hook_related_posts()`** - Hook automático en `apus_after_post_content` - Se ejecuta solo en single posts - **`apus_enqueue_related_posts_styles()`** - Carga el CSS solo cuando es necesario - Dependencia: `apus-bootstrap` - **`apus_related_posts_default_options()`** - Configura opciones por defecto en la base de datos - Se ejecuta en `after_setup_theme` ### 2. `assets/css/related-posts.css` (460 líneas) Estilos completos para el sistema de posts relacionados: #### Secciones Principales: - **Related Posts Section**: Contenedor principal y título con línea decorativa - **Card Base**: Estructura de tarjetas con sombras y transiciones - **Card with Thumbnail**: Tarjetas con imagen destacada (aspect ratio 4:3) - **Card without Image**: Tarjetas con fondo de color y título centrado - **Category Badge**: Badge flotante con backdrop-filter - **Card Content**: Título, excerpt y metadata - **Responsive**: Breakpoints para tablet, mobile y small mobile - **Print Styles**: Optimización para impresión - **Dark Mode**: Soporte para `prefers-color-scheme: dark` - **Accessibility**: Focus states y reduced motion ### 3. `inc/admin/related-posts-options.php` (220+ líneas) Helpers y documentación para configuración: - **`apus_get_related_posts_options()`**: Obtiene todas las opciones disponibles - **`apus_update_related_posts_option()`**: Actualiza una opción específica - **`apus_reset_related_posts_options()`**: Resetea a valores por defecto - **`apus_get_related_posts_documentation()`**: Documentación estructurada ## Opciones Configurables ### Opciones Disponibles (WordPress Options API) ```php // Habilitar/deshabilitar 'apus_related_posts_enabled' => true|false (default: true) // Título de la sección 'apus_related_posts_title' => string (default: 'Related Posts') // Cantidad de posts 'apus_related_posts_count' => int (default: 3, min: 1, max: 12) // Columnas en el grid 'apus_related_posts_columns' => int (default: 3, options: 1-4) // Mostrar excerpt 'apus_related_posts_show_excerpt' => true|false (default: true) // Longitud del excerpt 'apus_related_posts_excerpt_length' => int (default: 20, min: 5, max: 100) // Mostrar fecha 'apus_related_posts_show_date' => true|false (default: true) // Mostrar categoría 'apus_related_posts_show_category' => true|false (default: true) // Colores de fondo para posts sin imagen 'apus_related_posts_bg_colors' => array (default: 6 colores) ``` ### Ejemplos de Configuración #### Ejemplo 1: Cambiar título y cantidad ```php update_option('apus_related_posts_title', 'También te puede interesar'); update_option('apus_related_posts_count', 4); ``` #### Ejemplo 2: Layout de 2 columnas sin excerpt ```php update_option('apus_related_posts_columns', 2); update_option('apus_related_posts_show_excerpt', false); ``` #### Ejemplo 3: Colores personalizados ```php update_option('apus_related_posts_bg_colors', array( '#FF6B6B', // Rojo '#4ECDC4', // Teal '#45B7D1', // Azul '#FFA07A', // Coral '#98D8C8', // Menta '#F7DC6F', // Amarillo )); ``` #### Ejemplo 4: Deshabilitar temporalmente ```php update_option('apus_related_posts_enabled', false); ``` ## Hooks y Filtros ### Filter: `apus_related_posts_args` Modifica los argumentos de WP_Query para posts relacionados: ```php add_filter('apus_related_posts_args', function($args, $post_id) { // Ordenar por fecha en vez de aleatorio $args['orderby'] = 'date'; $args['order'] = 'DESC'; // Solo posts de los últimos 6 meses $args['date_query'] = array( array('after' => '6 months ago') ); // Excluir categoría específica $args['category__not_in'] = array(5); return $args; }, 10, 2); ``` ### Action: `apus_after_post_content` Hook donde se renderiza el contenido relacionado (ya implementado en `single.php`): ```php // En single.php (línea 210) do_action('apus_after_post_content'); ``` ## Características Técnicas ### Performance - ✅ Query optimizado con `no_found_rows` - ✅ Cache desactivado para posts relacionados - ✅ CSS cargado solo en single posts - ✅ Lazy loading de imágenes - ✅ Aspect ratio CSS nativo ### Responsive Design - ✅ Bootstrap 5 grid system - ✅ Breakpoints: mobile (575px), tablet (768px), desktop (992px) - ✅ Aspect ratio adaptativo (60% mobile, 75% desktop) - ✅ Tamaños de fuente escalables ### Accesibilidad - ✅ Focus states visibles - ✅ `prefers-reduced-motion` support - ✅ Semantic HTML - ✅ Alt text en imágenes - ✅ Contraste de colores adecuado ### SEO - ✅ Estructura semántica con `
` y `
` - ✅ Uso de `