- 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.
13 KiB
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:
-- 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_componentsywp_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()enclass-admin-menu.php
SOLUCIÓN:
- ✅ Crear menú propio en sidebar izquierdo (nivel superior)
- ✅ Cambiar a
add_menu_page()enclass-admin-menu.php
Modificar: admin/includes/class-admin-menu.php
ANTES (línea 28-36):
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:
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:
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
// 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:
public function get_defaults() {
return array(
'version' => APUS_ADMIN_PANEL_VERSION,
'components' => array()
);
}
Después:
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:
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
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:
- Abrir Admin Panel
- Modificar configuración de componente
- Guardar cambios
- Verificar que se guardó en lugar correcto (wp_options o tabla)
- Recargar Admin Panel
- Verificar que muestra personalización + defaults
PASO 5.4: Probar renderizado en frontend
Duración: 10 min
Verificar:
- Frontend muestra defaults cuando no hay personalizaciones
- Frontend muestra personalizaciones cuando las hay
- 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