# Integración WordPress + Symfony - Caval Studio

Esta guía te ayudará a integrar WordPress como blog dentro de tu sitio Symfony existente.

## 📋 Requisitos

- Docker y Docker Compose instalados
- Symfony 6+ funcionando
- Apache con módulos `mod_rewrite`, `mod_proxy` y `mod_proxy_http`
- PHP 8.2+
- MySQL 8.0+

## 🚀 Instalación

### 1. Configurar Docker

Los archivos `docker-compose.yml` y `docker/apache/000-default.conf` ya están configurados. Ejecuta:

```bash
docker-compose up -d --build
```

Esto levantará:
- **Symfony**: `http://localhost:8001`
- **WordPress**: `http://localhost:8002` (administración)
- **Blog integrado**: `http://localhost:8001/blog`

### 2. Configurar WordPress

1. Ve a `http://localhost:8002/wp-admin` para completar la instalación inicial
2. Crea tu usuario administrador
3. Ve a **Apariencia > Temas** y activa "Caval Studio Blog"
4. Ve a **Ajustes > Enlaces permanentes** y selecciona "Nombre de la entrada"

### 3. Configurar URLs de WordPress

En el panel de WordPress, ve a **Ajustes > Generales**:
- **Dirección de WordPress (URL)**: `http://localhost:8002`
- **Dirección del sitio (URL)**: `http://localhost:8001/blog`

### 4. Generar claves de seguridad

1. Ve a https://api.wordpress.org/secret-key/1.1/salt/
2. Copia las claves generadas
3. Reemplaza las claves en el archivo `wp-config.php` del contenedor WordPress

## 🎨 Personalización del Tema

El tema personalizado está en `blog-theme/` y incluye:

- **style.css**: Estilos que coinciden con tu diseño Symfony
- **functions.php**: Funciones para obtener header/footer de Symfony
- **index.php**: Template para la lista de posts
- **single.php**: Template para posts individuales

### Modificar estilos

Edita `blog-theme/style.css` para ajustar:
- Colores de marca
- Tipografías
- Espaciados
- Responsive design

### Agregar nuevos templates

Puedes crear templates adicionales:
- `category.php` - Para páginas de categorías
- `archive.php` - Para archivos por fecha
- `search.php` - Para resultados de búsqueda
- `404.php` - Para páginas no encontradas

## 🔧 Configuración de Producción

### 1. Actualizar URLs

En `blog-theme/functions.php`, cambia:

```php
if (!defined('WP_DEBUG') || !WP_DEBUG) {
    $symfony_url = 'https://tudominio.com'; // ← Tu dominio real
}
```

### 2. Configurar Apache/Nginx

#### Apache (.htaccess en public/)
```apache
# Redireccionar /blog a WordPress
RewriteRule ^blog/(.*)$ http://wordpress-container/$1 [P,L]
RewriteRule ^blog$ http://wordpress-container/ [P,L]
```

#### Nginx
```nginx
location /blog {
    proxy_pass http://wordpress-container;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
```

### 3. Optimización SEO

El tema incluye optimizaciones básicas:
- Meta descriptions automáticas
- Open Graph tags
- URLs limpias
- Breadcrumbs
- Sitemap XML (instalar plugin Yoast SEO)

### 4. Plugins recomendados

Instala estos plugins para mejorar el rendimiento:

- **Yoast SEO**: Optimización SEO avanzada
- **W3 Total Cache**: Cache y optimización
- **Smush**: Optimización de imágenes
- **Akismet**: Protección anti-spam
- **Wordfence**: Seguridad

## 📱 URLs del Blog

- **Lista de posts**: `/blog`
- **Post individual**: `/blog/titulo-del-post`
- **Categoría**: `/blog/category/nombre-categoria`
- **Archivo por fecha**: `/blog/2024/01`
- **Búsqueda**: `/blog/?s=termino`
- **Admin WordPress**: `/blog/wp-admin` (solo para ti)

## 🔒 Seguridad

### Ocultar wp-admin del público

Agrega a `functions.php`:

```php
// Ocultar wp-admin de usuarios no logueados
function restrict_admin_area() {
    if (is_admin() && !current_user_can('administrator') && !(defined('DOING_AJAX') && DOING_AJAX)) {
        wp_redirect(home_url());
        exit;
    }
}
add_action('admin_init', 'restrict_admin_area');
```

### Configurar firewall

En `.htaccess` del WordPress:

```apache
# Proteger wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>

# Proteger .htaccess
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
```

## 🚀 Despliegue

### 1. Preparar para producción

```bash
# Construir contenedores para producción
docker-compose -f docker-compose.prod.yml up -d --build

# Hacer backup de la base de datos
docker exec wordpress_db mysqldump -u wordpress -p wordpress > blog_backup.sql
```

### 2. Variables de entorno

Crea `.env.prod`:

```env
# URLs de producción
SYMFONY_URL=https://tudominio.com
WORDPRESS_URL=https://tudominio.com/blog

# Base de datos
DB_HOST=tu-servidor-db
DB_NAME=wordpress_prod
DB_USER=wp_user_prod
DB_PASS=password_seguro

# Configuración de cache
REDIS_URL=redis://tu-servidor-redis:6379
```

## 📊 Analytics y Seguimiento

### Google Analytics

Agrega a `functions.php`:

```php
function add_google_analytics() {
    if (!is_admin()) {
        ?>
        <!-- Google Analytics -->
        <script async src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
        <script>
            window.dataLayer = window.dataLayer || [];
            function gtag(){dataLayer.push(arguments);}
            gtag('js', new Date());
            gtag('config', 'GA_MEASUREMENT_ID');
        </script>
        <?php
    }
}
add_action('wp_head', 'add_google_analytics');
```

### Google Search Console

1. Verifica tu dominio en Google Search Console
2. Envía el sitemap: `https://tudominio.com/blog/sitemap.xml`
3. Solicita indexación de las páginas principales

## 🛠 Mantenimiento

### Backups automáticos

Crea un script de backup:

```bash
#!/bin/bash
# backup_blog.sh

# Backup de archivos
tar -czf blog_files_$(date +%Y%m%d).tar.gz blog-theme/

# Backup de base de datos
docker exec wordpress_db mysqldump -u wordpress -p wordpress > blog_db_$(date +%Y%m%d).sql

# Limpiar backups antiguos (mantener 30 días)
find . -name "blog_*" -type f -mtime +30 -delete
```

### Actualizaciones

1. **WordPress Core**: Actualizar desde wp-admin
2. **Plugins**: Revisar y actualizar mensualmente
3. **Tema**: Hacer backup antes de modificar

## 🐛 Troubleshooting

### Error 500 en /blog
- Verificar permisos de archivos
- Revisar logs de Apache: `docker logs cavalstudio_be`
- Verificar configuración de proxy en Apache

### Estilos no cargan
- Verificar que TailwindCSS se carga correctamente
- Limpiar cache del navegador
- Verificar rutas de assets

### Header/Footer no aparecen
- Verificar que los endpoints `/api/header` y `/api/footer` funcionen
- Revisar conectividad entre contenedores
- Verificar logs de cURL en WordPress

### URLs no funcionan
- Verificar configuración de permalinks en WordPress
- Comprobar que mod_rewrite esté habilitado
- Revisar configuración de proxy en Apache

## 📞 Soporte

Si tienes problemas con la integración:

1. Revisa los logs: `docker-compose logs`
2. Verifica la conectividad: `docker exec cavalstudio_be ping wordpress`
3. Comprueba las URLs de API: `curl http://localhost:8001/api/header`

---

**¡Listo!** Tu blog WordPress ya está integrado con Symfony manteniendo el mismo diseño visual. Los usuarios verán una experiencia unificada mientras tú tienes toda la potencia de WordPress para gestionar el contenido. 