- Plan de 6 fases para preparar tema antes de modificar algoritmo - FASE 1: Análisis de arquitectura actual - FASE 2: Corregir ubicación del menú admin (nuevo paso agregado) * Cambiar add_theme_page() a add_menu_page() * Mover 'Apus Theme Options' a menú propio en sidebar - FASE 3: Crear Defaults Manager - FASE 4: Decisión sobre personalizaciones - FASE 5: Testing y validación - FASE 6: Documentación Plan ejecutable paso a paso antes de tocar algoritmo.
413 lines
13 KiB
Markdown
413 lines
13 KiB
Markdown
# PLAN: Preparación del Tema para Arquitectura con Base de Datos
|
|
|
|
**Fecha:** 2025-01-14
|
|
**Objetivo:** Preparar el tema Apus para trabajar con la nueva arquitectura de defaults en base de datos
|
|
|
|
---
|
|
|
|
## 🎯 CONTEXTO
|
|
|
|
### Arquitectura actual (PROBLEMÁTICA):
|
|
```
|
|
┌─────────────────────────────────────────┐
|
|
│ Settings Manager │
|
|
│ ├─ get_defaults() → VACÍO ❌ │
|
|
│ ├─ get_settings() → wp_options ✅ │
|
|
│ └─ save_settings() → wp_options ✅ │
|
|
└─────────────────────────────────────────┘
|
|
|
|
┌─────────────────────────────────────────┐
|
|
│ DB Manager │
|
|
│ ├─ Tabla: wp_apus_theme_components │
|
|
│ ├─ get_config() ✅ │
|
|
│ └─ save_config() ✅ │
|
|
└─────────────────────────────────────────┘
|
|
|
|
┌─────────────────────────────────────────┐
|
|
│ Tabla: wp_apus_theme_components_defaults│
|
|
│ ├─ Creada ✅ │
|
|
│ ├─ Sin clase para leer ❌ │
|
|
│ └─ Vacía (sin datos) ❌ │
|
|
└─────────────────────────────────────────┘
|
|
```
|
|
|
|
### Arquitectura deseada (OBJETIVO):
|
|
```
|
|
┌──────────────────────────────────────────────────────────┐
|
|
│ DEFAULTS MANAGER (NUEVO) │
|
|
│ ├─ Tabla: wp_apus_theme_components_defaults │
|
|
│ ├─ get_defaults($component_name) → leer tabla ✅ │
|
|
│ └─ Operación: SOLO LECTURA (escritura desde algoritmo) │
|
|
└──────────────────────────────────────────────────────────┘
|
|
↓
|
|
┌──────────────────────────────────────────────────────────┐
|
|
│ SETTINGS MANAGER (MODIFICADO) │
|
|
│ ├─ get_defaults() → usa Defaults Manager ✅ │
|
|
│ ├─ get_settings() → merge defaults + personalizaciones │
|
|
│ └─ save_settings() → guarda SOLO personalizaciones │
|
|
└──────────────────────────────────────────────────────────┘
|
|
↓
|
|
┌──────────────────────────────────────────────────────────┐
|
|
│ PERSONALIZACIÓN: ¿Dónde guardar? │
|
|
│ Opción A: wp_options (actual) ✅ SIMPLE │
|
|
│ Opción B: wp_apus_theme_components ❓ COMPLEJO │
|
|
└──────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 FASE 1: ANÁLISIS DE ARQUITECTURA ACTUAL
|
|
|
|
### PASO 1.1: Verificar qué contiene cada tabla
|
|
**Duración:** 5 min
|
|
|
|
**Ejecutar queries:**
|
|
```sql
|
|
-- Verificar tabla de defaults (debe estar vacía)
|
|
SELECT COUNT(*) FROM wp_apus_theme_components_defaults;
|
|
SELECT * FROM wp_apus_theme_components_defaults LIMIT 5;
|
|
|
|
-- Verificar tabla de componentes
|
|
SELECT COUNT(*) FROM wp_apus_theme_components;
|
|
SELECT component_name, COUNT(*) as configs
|
|
FROM wp_apus_theme_components
|
|
GROUP BY component_name;
|
|
|
|
-- Verificar wp_options
|
|
SELECT option_value FROM wp_options WHERE option_name = 'apus_theme_settings';
|
|
```
|
|
|
|
**Documentar:**
|
|
- ¿Hay datos en `wp_apus_theme_components`?
|
|
- ¿Hay datos en `wp_options` (apus_theme_settings)?
|
|
- ¿Cuál se está usando actualmente?
|
|
|
|
---
|
|
|
|
### PASO 1.2: Analizar flujo actual de datos
|
|
**Duración:** 10 min
|
|
|
|
**Revisar archivos:**
|
|
- [ ] `class-settings-manager.php` - ¿De dónde lee? ¿Dónde guarda?
|
|
- [ ] `class-db-manager.php` - ¿Qué tabla maneja?
|
|
- [ ] Admin Panel JS - ¿Qué endpoints AJAX llama?
|
|
- [ ] Frontend (header.php, etc.) - ¿De dónde obtiene datos para renderizar?
|
|
|
|
**Documentar:**
|
|
```
|
|
Flujo actual:
|
|
1. Usuario abre Admin Panel → AJAX: apus_get_settings → ???
|
|
2. Usuario guarda cambios → AJAX: apus_save_settings → ???
|
|
3. Frontend renderiza componente → Función: ??? → Datos de: ???
|
|
```
|
|
|
|
---
|
|
|
|
### PASO 1.3: Identificar conflictos
|
|
**Duración:** 5 min
|
|
|
|
**Preguntas a responder:**
|
|
- ¿Por qué existen 2 tablas (`wp_apus_theme_components` y `wp_apus_theme_components_defaults`)?
|
|
- ¿Cuál es el propósito de cada una?
|
|
- ¿Se están usando ambas o solo una?
|
|
- ¿Hay duplicación de datos?
|
|
|
|
**Decisión arquitectónica:**
|
|
```
|
|
OPCIÓN A (RECOMENDADA):
|
|
├─ wp_apus_theme_components_defaults → DEFAULTS (solo lectura tema)
|
|
├─ wp_options (apus_theme_settings) → PERSONALIZACIONES (lectura/escritura)
|
|
└─ ELIMINAR: wp_apus_theme_components (no usar)
|
|
|
|
OPCIÓN B:
|
|
├─ wp_apus_theme_components_defaults → DEFAULTS (solo lectura tema)
|
|
├─ wp_apus_theme_components → PERSONALIZACIONES (lectura/escritura)
|
|
└─ ELIMINAR: wp_options (apus_theme_settings) (no usar)
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 FASE 2: CORREGIR UBICACIÓN DEL MENÚ ADMIN
|
|
|
|
### PASO 2.0: Mover menú a nivel superior del sidebar
|
|
**Duración:** 10 min
|
|
|
|
**PROBLEMA ACTUAL:**
|
|
- ❌ "APUs Theme Settings" está bajo menú "Apariencia"
|
|
- ❌ Se usa `add_theme_page()` en `class-admin-menu.php`
|
|
|
|
**SOLUCIÓN:**
|
|
- ✅ Crear menú propio en sidebar izquierdo (nivel superior)
|
|
- ✅ Cambiar a `add_menu_page()` en `class-admin-menu.php`
|
|
|
|
**Modificar:** `admin/includes/class-admin-menu.php`
|
|
|
|
**ANTES (línea 28-36):**
|
|
```php
|
|
public function add_menu_page() {
|
|
add_theme_page(
|
|
'APUs Theme Settings', // Page title
|
|
'Tema APUs', // Menu title
|
|
'manage_options', // Capability
|
|
'apus-theme-settings', // Menu slug
|
|
array($this, 'render_admin_page'), // Callback
|
|
59 // Position
|
|
);
|
|
}
|
|
```
|
|
|
|
**DESPUÉS:**
|
|
```php
|
|
public function add_menu_page() {
|
|
add_menu_page(
|
|
'Apus Theme Options', // Page title
|
|
'Apus Theme', // Menu title
|
|
'manage_options', // Capability
|
|
'apus-theme-settings', // Menu slug
|
|
array($this, 'render_admin_page'), // Callback
|
|
'dashicons-admin-generic', // Icon (WordPress Dashicon)
|
|
59 // Position (después de Settings)
|
|
);
|
|
}
|
|
```
|
|
|
|
**Verificar:**
|
|
- [ ] Menú aparece en sidebar izquierdo
|
|
- [ ] Ícono es visible
|
|
- [ ] Título es "Apus Theme"
|
|
- [ ] Al hacer click abre el panel de configuración
|
|
|
|
**Nota:** También renombrar el método de `add_menu_page()` a algo más descriptivo si es necesario, ya que ahora usa la función `add_menu_page()` de WordPress.
|
|
|
|
---
|
|
|
|
## 📋 FASE 3: CREAR DEFAULTS MANAGER
|
|
|
|
### PASO 3.1: Crear clase Defaults Manager
|
|
**Duración:** 20 min
|
|
|
|
**Archivo:** `admin/includes/class-defaults-manager.php`
|
|
|
|
**Métodos necesarios:**
|
|
```php
|
|
class APUS_Defaults_Manager {
|
|
// Leer todos los defaults de un componente
|
|
public function get_component_defaults($component_name);
|
|
|
|
// Leer un default específico
|
|
public function get_default($component_name, $config_key);
|
|
|
|
// Listar componentes con defaults
|
|
public function list_components();
|
|
|
|
// Verificar si existen defaults para componente
|
|
public function has_defaults($component_name);
|
|
}
|
|
```
|
|
|
|
**Responsabilidades:**
|
|
- ✅ LEER de `wp_apus_theme_components_defaults`
|
|
- ❌ NO ESCRIBIR (escritura solo desde algoritmo)
|
|
- ✅ Parsear tipos de datos (boolean, integer, json, array)
|
|
- ✅ Cachear resultados (opcional, para performance)
|
|
|
|
---
|
|
|
|
### PASO 3.2: Integrar Defaults Manager en init.php
|
|
**Duración:** 5 min
|
|
|
|
**Modificar:** `admin/init.php`
|
|
|
|
```php
|
|
// Cargar Defaults Manager
|
|
require_once APUS_ADMIN_PANEL_PATH . 'includes/class-defaults-manager.php';
|
|
|
|
// Inicializar
|
|
$defaults_manager = new APUS_Defaults_Manager();
|
|
```
|
|
|
|
---
|
|
|
|
### PASO 3.3: Modificar Settings Manager para usar Defaults Manager
|
|
**Duración:** 15 min
|
|
|
|
**Modificar:** `admin/includes/class-settings-manager.php`
|
|
|
|
**Antes:**
|
|
```php
|
|
public function get_defaults() {
|
|
return array(
|
|
'version' => APUS_ADMIN_PANEL_VERSION,
|
|
'components' => array()
|
|
);
|
|
}
|
|
```
|
|
|
|
**Después:**
|
|
```php
|
|
public function get_defaults() {
|
|
$defaults_manager = new APUS_Defaults_Manager();
|
|
$components = $defaults_manager->list_components();
|
|
|
|
$defaults = array(
|
|
'version' => APUS_ADMIN_PANEL_VERSION,
|
|
'components' => array()
|
|
);
|
|
|
|
foreach ($components as $component_name) {
|
|
$defaults['components'][$component_name] =
|
|
$defaults_manager->get_component_defaults($component_name);
|
|
}
|
|
|
|
return $defaults;
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 FASE 4: DECISIÓN SOBRE PERSONALIZACIONES
|
|
|
|
### PASO 4.1: Evaluar opciones
|
|
**Duración:** 10 min
|
|
|
|
**Opción A: Usar wp_options (RECOMENDADA)**
|
|
- ✅ Más simple
|
|
- ✅ Ya implementado
|
|
- ✅ Funciona con Settings Manager actual
|
|
- ❌ Menos estructurado
|
|
|
|
**Opción B: Usar wp_apus_theme_components**
|
|
- ✅ Más estructurado
|
|
- ✅ Usa DB Manager
|
|
- ❌ Requiere más cambios
|
|
- ❌ Más complejo
|
|
|
|
**Decisión:** [A COMPLETAR POR USUARIO]
|
|
|
|
---
|
|
|
|
### PASO 4.2: Implementar según decisión
|
|
**Duración:** Variable
|
|
|
|
**Si Opción A (wp_options):**
|
|
- [ ] Mantener Settings Manager como está
|
|
- [ ] Solo agregar get_defaults() con Defaults Manager
|
|
- [ ] save_settings() sigue guardando en wp_options
|
|
|
|
**Si Opción B (wp_apus_theme_components):**
|
|
- [ ] Modificar Settings Manager para usar DB Manager
|
|
- [ ] Cambiar save_settings() para guardar en tabla
|
|
- [ ] Cambiar get_settings() para leer de tabla
|
|
- [ ] Eliminar uso de wp_options
|
|
|
|
---
|
|
|
|
## 📋 FASE 5: TESTING Y VALIDACIÓN
|
|
|
|
### PASO 5.1: Poblar tabla de defaults con datos de prueba
|
|
**Duración:** 10 min
|
|
|
|
**Insertar defaults de Top Bar:**
|
|
```sql
|
|
INSERT INTO wp_apus_theme_components_defaults
|
|
(component_name, config_key, config_value, data_type, version)
|
|
VALUES
|
|
('top_bar', 'enabled', '1', 'boolean', '2.0.0'),
|
|
('top_bar', 'message_text', 'Accede a más de 200,000...', 'string', '2.0.0'),
|
|
-- ... más configs
|
|
```
|
|
|
|
---
|
|
|
|
### PASO 5.2: Probar lectura de defaults
|
|
**Duración:** 10 min
|
|
|
|
**Crear script de prueba:** `admin/test-defaults.php`
|
|
|
|
```php
|
|
<?php
|
|
require_once 'wp-load.php';
|
|
|
|
$defaults_manager = new APUS_Defaults_Manager();
|
|
$settings_manager = new APUS_Settings_Manager();
|
|
|
|
// Test 1: Leer defaults de Top Bar
|
|
$top_bar_defaults = $defaults_manager->get_component_defaults('top_bar');
|
|
echo "Top Bar Defaults:\n";
|
|
print_r($top_bar_defaults);
|
|
|
|
// Test 2: Obtener settings completos (defaults + personalizaciones)
|
|
$all_settings = $settings_manager->get_settings();
|
|
echo "\nAll Settings:\n";
|
|
print_r($all_settings);
|
|
```
|
|
|
|
---
|
|
|
|
### PASO 5.3: Probar guardar personalizaciones
|
|
**Duración:** 10 min
|
|
|
|
**Test manual:**
|
|
1. Abrir Admin Panel
|
|
2. Modificar configuración de componente
|
|
3. Guardar cambios
|
|
4. Verificar que se guardó en lugar correcto (wp_options o tabla)
|
|
5. Recargar Admin Panel
|
|
6. Verificar que muestra personalización + defaults
|
|
|
|
---
|
|
|
|
### PASO 5.4: Probar renderizado en frontend
|
|
**Duración:** 10 min
|
|
|
|
**Verificar:**
|
|
1. Frontend muestra defaults cuando no hay personalizaciones
|
|
2. Frontend muestra personalizaciones cuando las hay
|
|
3. Personalización sobrescribe default (merge correcto)
|
|
|
|
---
|
|
|
|
## 📋 FASE 6: DOCUMENTACIÓN
|
|
|
|
### PASO 6.1: Documentar arquitectura final
|
|
**Duración:** 15 min
|
|
|
|
**Crear:** `admin/ARQUITECTURA-DATOS.md`
|
|
|
|
**Contenido:**
|
|
- Diagrama de flujo de datos
|
|
- Explicación de cada tabla
|
|
- Explicación de cada clase
|
|
- Cómo se combinan defaults + personalizaciones
|
|
- Ejemplos de uso
|
|
|
|
---
|
|
|
|
## ✅ CHECKLIST FINAL
|
|
|
|
Antes de modificar el algoritmo, verificar:
|
|
|
|
- [ ] Existe `class-defaults-manager.php`
|
|
- [ ] Defaults Manager puede leer de `wp_apus_theme_components_defaults`
|
|
- [ ] Settings Manager usa Defaults Manager en `get_defaults()`
|
|
- [ ] Se decidió dónde guardar personalizaciones (wp_options vs tabla)
|
|
- [ ] Tabla de defaults tiene datos de prueba
|
|
- [ ] Tests de lectura funcionan
|
|
- [ ] Tests de guardar funcionan
|
|
- [ ] Frontend renderiza correctamente
|
|
- [ ] Arquitectura está documentada
|
|
|
|
---
|
|
|
|
## 🚀 SIGUIENTE PASO
|
|
|
|
Una vez completado este plan:
|
|
- ✅ TEMA LISTO para procesar datos de BD
|
|
- ✅ Puede leer defaults
|
|
- ✅ Puede combinar con personalizaciones
|
|
- ✅ Puede guardar personalizaciones
|
|
- ✅ Puede renderizar en frontend
|
|
|
|
**ENTONCES:**
|
|
→ Proceder a modificar el algoritmo `/implementar-componente-admin`
|