Documentación · Documentación técnica
Inicialización y ciclo de vida del plugin
Este documento describe cómo se carga el plugin ADP Car Market Hub, qué ocurre durante la activación, desactivación y desinstalación, y qué migraciones ejecuta el plugin a medida que se inicia.
Cuándo utilizar este documento
Lea este documento si necesita:
- Rastrear el orden en el que se ejecuta el código del plugin durante una solicitud de WordPress.
- Comprender qué acciones se ejecutan al activar y desactivar (capacidades, páginas por defecto, tablas personalizadas, eventos programados).
- Planificar una actualización o solucionar problemas de una migración que no se aplicó.
- Decidir dónde enganchar (hook) código personalizado para que se ejecute después de que los servicios del plugin estén disponibles.
Descripción general
El plugin se inicia desde el archivo principal
adp-car-market-hub.php. Ese archivo es corto por diseño y solo realiza
tareas que deben ocurrir en el momento de la carga del archivo. Todo el código de las características se carga
a través de un cargador automático de estilo PSR-4 y se conecta mediante el
singleton AS24CI\Plugin en la acción plugins_loaded.
Constantes definidas en el momento de la carga
adp-car-market-hub.php define las siguientes constantes antes de que se ejecute
cualquier hook:
AS24CI_VERSION— Versión actual del plugin (mantenida en sincronía con la cabecera del plugin yreadme.txt).AS24CI_PLUGIN_FILE— Ruta absoluta al archivo principal del plugin.AS24CI_PLUGIN_DIR— Directorio del plugin (con barra diagonal final).AS24CI_PLUGIN_URL— URL al directorio del plugin, útil para la cola de recursos (assets).
El archivo también llama a require_once AS24CI_PLUGIN_DIR . 'src/Core/Helpers.php'
para cargar ayudantes procedimentales compartidos y define condicionalmente los ayudantes globales
as24ci_format() y as24ci_get_available_ai_models() si no se ha
declarado antes ninguna función con el mismo nombre.
Cargador automático (Autoloader)
Inmediatamente después de las constantes, el archivo registra un pequeño
cargador automático compatible con PSR-4 para el espacio de nombres AS24CI\. Los nombres de las clases
se asignan a nombres de archivo con el formato
class-as24ci-<lower-dashed-name>.php. El cargador automático busca primero en
includes/ y recurre a includes/admin/ para las clases exclusivas de administración.
Registro de hooks en el momento de la carga
El archivo principal registra los siguientes hooks antes de que se ejecute cualquier código de características:
| Hook | Callback | Propósito |
|---|---|---|
plugins_loaded (prioridad 1) | as24ci_load_textdomain | Carga el dominio de texto adp-car-market-hub desde /languages. |
plugins_loaded (prioridad por defecto) | AS24CI\Plugin::init | Construye el singleton y registra todos los hooks de características. |
register_activation_hook | AS24CI\Plugin::activate | Se ejecuta una vez cuando se activa el plugin. |
register_deactivation_hook | AS24CI\Plugin::deactivate | Se ejecuta una vez cuando se desactiva el plugin. |
cron_schedules | as24ci_add_custom_cron_intervals | Registra el intervalo personalizado de WP-Cron as24ci_every_5_minutes (300 s). |
plugin_action_links_<basename> | as24ci_add_plugin_action_links | Añade los enlaces de "Activación de licencia" y "Ajustes" en la pantalla de Plugins de WordPress. |
plugin_row_meta | as24ci_add_plugin_row_meta | Añade un enlace de "Documentación" a los metadatos de la fila del plugin. |
El archivo principal también inicia el módulo Content Studio en el momento de la carga,
independientemente del enrutador de AS24CI\Plugin:
register_activation_hook→AS24CI\Content_Studio_Repository::maybe_create_tables(crea las tablas de Content Studio al activar).admin_menu(prioridad 30) →AS24CI\Admin_Tab_Content_Studio::register_menu.plugins_loaded(prioridad 20) →AS24CI\Content_Studio_Admin_Worker::register_hooks.
El intervalo personalizado de WP-Cron se registra incondicionalmente para que WordPress siempre lo conozca, incluso cuando los interruptores de características individuales que lo utilizan estén desactivados.
Secuencia de inicio (solicitud normal)
Cuando WordPress carga el plugin durante una solicitud normal, se producen los siguientes pasos en orden:
- Se incluye el archivo principal; se registran las constantes, el cargador automático y los hooks enumerados anteriormente.
- WordPress dispara
plugins_loadeden la prioridad 1:as24ci_load_textdomain()ejecutaload_plugin_textdomain()para que las traducciones estén disponibles antes de que se renderice cualquier cadena traducible. - WordPress dispara
plugins_loadeden la prioridad por defecto:AS24CI\Plugin::init()construye el singleton. - El constructor de
AS24CI\Plugin: - Instancia los servicios compartidos:Logger,Client,Image_Importer,Vehicle_Repository,Importer,Scheduler. - Llama aVehicle_Field_Resolver::set_repository()para que el resolvedor central de campos pueda leer de la tabla de vehículos. - Llama aVehicle_Deleter::set_repository()yVehicle_Deleter::register_hooks()para que cada ruta de eliminación permanente (WordPress nativo, sincronización completa del importador, acción en lote) pase por una única limpieza idempotente. - Llama aregister_hooks()para conectar todas las características para la solicitud actual. register_hooks()conecta dos callbacks deadmin_init(se conectan duranteplugins_loadedpero solo se disparan en unadmin_initposterior enwp-admin): -AS24CI\Plugin::maybe_upgrade_caps()— garantiza que existan los roles y las capacidades para la versión actual del plugin. -AS24CI\Plugin::maybe_upgrade()— ejecuta las migraciones de opciones/datos.register_hooks()registra entonces los hooks propios de cada subsistema: - Siempre activos:CPT,Taxonomies,Leads_CPT,Contact_Form,Templates,Assets,Ajax,Archive_Filters,Cron_Endpoint,License_Manager,License_Refresh_Signal,Webhooks,Analytics,Ai_Assistant,Data_Quality_Scanner,Pricing_Engine(con programación diaria),Financing_Calculator,Rest_Api,Locations,Seller_Profile_Fields, además del programador. ElUpdaterprivado también se conecta aquí, restringido a los contextos de administración / WP-Cron / WP-CLI. - Restringidos por opciones de características enAS24CI\Options:Schema(másSeo_Compatibility),Sitemap,Social_Share,Pdf_Datasheet,Favorites,Compare,Export,Bulk_Actions,Search_Agent. - Solo administración (is_admin()verdadero): el controladorAS24CI\Admin,Admin_Team(CMH Team),Update_VisibilityyAdmin_Setup_Wizard, y — cuandoOptions::FEATURE_DASHBOARD_WIDGETestá habilitado — el widget del dashboard.- WordPress continúa con el resto del ciclo de vida de la solicitud. La mayoría de
las clases de características registran hooks adicionales en acciones posteriores como
init(tipos de contenido personalizados, taxonomías, creación de tablas para los Agentes de Búsqueda),rest_api_init(rutas REST),wp_footer(píxel de seguimiento de analytics) oadmin_init(actualizaciones de tablas exclusivas de administración).
Activación
AS24CI\Plugin::activate() está registrado con
register_activation_hook y se ejecuta una vez cuando un administrador
activa el plugin. Realiza el siguiente trabajo, en orden:
- Llama a
seed_safe_defaults(), que utilizaadd_option()para instalar valores por defecto conservadores para la primera configuración. Los valores existentes nunca se sobrescriben. Valores por defecto destacados: -as24ci_default_currency=EUR. -as24ci_default_post_status=draftpara que los administradores puedan revisar los mapeos antes de publicar. -as24ci_max_images=30(un límite finito en lugar de ilimitado). -as24ci_full_sync=0(la eliminación permanente sigue siendo opcional). - Las características orientadas al frontend (sitemap, schema, favoritos, comparador, financiación, widget del dashboard, exportación, carga diferida, gestor de diseño) se activan por defecto; las características de seguimiento, externas, por lotes y de riesgo (analytics, REST API, AI Assistant, compartir en redes sociales, PDF datasheet, prueba de conducción) se desactivan por defecto. - Llama a
add_option( Options::SETUP_FIRST_ACTIVATION_AT, gmdate('c') )para registrar la marca de tiempo de la primera activación utilizada por el aviso de administración del Asistente de configuración. Debido a queadd_option()no realiza ninguna acción cuando el valor ya existe, las reactivaciones conservan la fecha original. - Llama a
ensure_roles_and_caps()que: - Crea el rolas24ci_editorsi no existe. - Otorga el conjunto de capacidadesas24ci_car/as24ci_carstanto aas24ci_editorcomo aadministrator. - Añade la capacidadmanage_as24_imports(la constantePlugin::CAP_MANAGE) únicamente a los administradores. Esta capacidad restringe la interfaz de usuario del importador, los ajustes, las herramientas y los logs. - Establece
as24ci_caps_versionen1para que la migración de capacidades no se ejecute de nuevo en solicitudes posteriores. - Establece
as24ci_db_versionen5para que las migraciones de datos definidas enmaybe_upgrade()se omitan en una instalación nueva. - Llama a
maybe_create_default_pages()para crear opcionalmente las páginasCars,Compare CarsyFavoritesy almacenar sus IDs de publicación enas24ci_page_archive_id,as24ci_page_compare_idyas24ci_page_favorites_id. El comportamiento está restringido por la opciónas24ci_create_default_pagesy los filtrosas24ci_default_pages_enabledyas24ci_default_pages. - Llama a
Analytics::maybe_create_table()para crear la tabla de analytics. - Llama a
Vehicle_Repository::maybe_create_table()para crear la tabla dedicada de vehículos. - Programa la limpieza diaria de retención de analytics
(
as24ci_daily_cleanup) si no está ya programada. - Llama a
License_Manager::ensure_cron_scheduled()para programar el evento diario de revalidación de licencia (as24ci_license_refresh). - Llama a
CPT::register_post_type()y luego aflush_rewrite_rules()para que el archivo/carsfuncione inmediatamente después de la activación. - Registra
Plugin activated (v<version>).a través deAS24CI\Logger.
Las tablas de Content Studio se crean mediante un hook de activación independiente
(Content_Studio_Repository::maybe_create_tables) registrado en el
archivo principal del plugin, no por Plugin::activate().
activate() no introduce deliberadamente URLs de API por defecto.
La falta de configuración se muestra a través de la interfaz de usuario de estado del sistema / salud
y a través de errores del cliente cuando se ejecuta el importador.
Migraciones de capacidades y datos
Se conectan dos métodos estáticos en admin_init (no en plugins_loaded)
para mantener las instalaciones existentes sincronizadas con la versión actual del
plugin. Conectarse a admin_init evita obligar a que la pila de autenticación
conectable se cargue temprano en cada solicitud:
maybe_upgrade_caps()— Conectado enadmin_init. Protege contra solicitudes AJAX, cron y REST (retornando temprano en esos contextos) y utiliza una protección estática por solicitud para que el cuerpo de la migración se ejecute como máximo una vez. No está restringido pormanage_options. Comparaas24ci_caps_versioncon el valor de destino (1en el momento de escribir este documento) y vuelve a ejecutarensure_roles_and_caps()si es necesario.maybe_upgrade()— Conectado enadmin_init; retorna temprano a menos queis_admin(). Comparaas24ci_db_versioncon el valor de destino (5) y aplica cualquier paso de migración pendiente. Cada paso es idempotente:- Migración 1: solo marcador, sin cambios de datos.
- Migración 2: fuerza la opción de consentimiento de analytics
(
Options::ANALYTICS_REQUIRE_CONSENT) a0. Los administradores pueden volver a habilitarla desde la interfaz de ajustes. - Migración 3: migra la opción heredada
FINANCING_PLACEMENTa las nuevas zonas del Gestor de diseño. La migración solo escribe en una zona del Gestor de diseño si esa zona aún no se ha guardado, por lo que se conservan los diseños existentes. - Migración 4: vuelve a aplicar
seed_safe_defaults()para que las instalaciones existentes reciban los nuevos valores por defecto seguros sin sobrescribir los valores que el administrador ya haya establecido. - Migración 5: protege los secretos en texto plano en reposo. Los secretos
reversibles (
Options::CLIENT_SECRET,Options::HUB_API_KEY,Options::WEBHOOK_SECRET) se envuelven a través deSecrets::encrypt(), y el token de cron (Options::CRON_TOKEN) se reemplaza con su hash HMAC con clave a través deSecrets::hash_token(). El proceso de migración es idempotente (se omiten las filas que ya están protegidas) y el token de acceso OAuth almacenado en caché se borra para que se vuelva a almacenar a través de la ruta cifrada. Después de todos los pasos aplicables, la opción se actualiza a la versión de destino actual.
Desactivación
AS24CI\Plugin::deactivate() se ejecuta una vez cuando un administrador
desactiva el plugin. Los datos existentes se conservan. El método:
- Llama a
wp_clear_scheduled_hook( Scheduler::CRON_HOOK )para eliminar los eventosas24ci_scheduled_importpendientes. - Llama a
wp_clear_scheduled_hook( Analytics::ANALYTICS_CLEANUP_CRON_HOOK )para eliminar el evento de retención de analíticas diario. - Llama a
Ai_Assistant::clear_ai_queue_schedule()para eliminar el evento de cron de la cola de IA en segundo plano. - Llama a
Pricing_Engine::clear_schedule()para eliminar el evento de cron diario del motor de precios. - Llama a
License_Manager::clear_cron()para eliminar el evento diario de revalidación de licencia (as24ci_license_refresh). - Llama a
wp_clear_scheduled_hook( 'as24ci_competitor_watcher_cron' )únicamente como limpieza heredada (legacy) — la característica Competitor Watcher (y su clase) ha sido eliminada; el nombre del hook está codificado de forma fija aquí para que cualquier evento programado remanente en instalaciones actualizadas desde versiones anteriores siga limpiándose. - Elimina el transient
Scheduler::LOCK_TRANSIENT(as24ci_cron_import_running) en caso de que el plugin se desactive mientras una importación está en curso. - Llama a
flush_rewrite_rules()y registraPlugin deactivated.
Debido a que la desactivación no altera las tablas de la base de datos, los custom post types o las opciones, al reactivar el plugin se restaura el estado anterior.
Desinstalación
Cuando el plugin se elimina desde el administrador de WordPress (no solo
se desactiva), WordPress ejecuta uninstall.php. El script:
- Carga
AS24CI\Options(si el archivo existe) para que la lista autoritativa de claves de opciones se pueda derivar deOptions::get_all_keys(), más un pequeño conjunto de claves adicionales (as24ci_models_cache_keys,as24ci_page_archive_id,as24ci_page_compare_idy la heredadaas24ci_api_total_cache). Se utiliza una lista de respaldo codificada de forma fija si la clase no se puede cargar. - Elimina los transients del plugin
(
as24ci_access_token,as24ci_cron_import_running,as24ci_image_queue_running). - Cancela la programación de los eventos pendientes para
as24ci_scheduled_importyas24ci_daily_cleanup. - Lee la opción
as24ci_delete_data_on_uninstall. Cuando el valor es1, el script elimina: - Todos los postsas24ci_car(forzado). - Todos los IDs de adjuntos almacenados en el postmeta_as24ci_image_idsde cada vehículo. Los adjuntos de galería manuales (_as24ci_manual_image_ids) no se eliminan intencionadamente. - El adjunto de imagen destacada de cada vehículo (limpieza defensiva). - Todos los postsas24ci_lead. - Las páginas de Vehículos, Comparar y Favoritos creadas durante la activación. - Siempre elimina (drop) las tablas personalizadas (independientemente de la casilla de verificación de exclusión voluntaria):
-
{$wpdb->prefix}as24ci_analytics-{$wpdb->prefix}as24_vehicles-{$wpdb->prefix}as24ci_search_agents-{$wpdb->prefix}as24ci_content_studio_assets-{$wpdb->prefix}as24ci_content_studio_jobsLas opciones de versión de esquema correspondientes (as24ci_vehicles_db_version,as24ci_search_agent_db_version,as24ci_content_studio_db_version) también se eliminan. - Elimina todas las claves de opciones recopiladas para el sitio.
- En instalaciones multisitio, la misma rutina se ejecuta una vez por sitio a través de
switch_to_blog().
Referencia de configuración
El comportamiento de bootstrap y ciclo de vida está influenciado por las siguientes
opciones (todas definidas como constantes en AS24CI\Options). El catálogo completo
está documentado en el documento Almacenamiento de Opciones y Ajustes;
aquí solo se enumeran las entradas relevantes para el ciclo de vida.
| Clave de opción | Constante | Usado por |
|---|---|---|
as24ci_caps_version | Options::CAPS_VERSION | maybe_upgrade_caps() para decidir si se deben ejecutar las capacidades. |
as24ci_db_version | Options::DB_VERSION | maybe_upgrade() para decidir qué migraciones aplicar. |
as24ci_create_default_pages | Options::CREATE_DEFAULT_PAGES | maybe_create_default_pages() durante la activación. |
as24ci_page_archive_id | n/a | Almacena el ID de la página de Vehículos creada en la activación. |
as24ci_page_compare_id | n/a | Almacena el ID de la página de Comparar creada en la activación. |
as24ci_page_favorites_id | n/a | Almacena el ID de la página de Favoritos creada en la activación. |
as24ci_delete_data_on_uninstall | Options::DELETE_DATA_ON_UNINSTALL | uninstall.php para decidir si se debe eliminar el contenido. |
Notas operativas
register_activation_hookse activa solo cuando un administrador activa el plugin desde la pantalla de Plugins. Actualizar los archivos del plugin no activa la activación; es por eso que existemaybe_upgrade().- Debido a que
maybe_upgrade()ymaybe_upgrade_caps()están enganchados enadmin_inity solo se ejecutan durante cargas de páginas de administración reales (no AJAX, REST o cron), las solicitudes exclusivas del frontend no asumen el coste de las comprobaciones de migración. La primera carga de una página de administración después de una actualización aplica cualquier migración pendiente. - Los TTL de bloqueo de WP-Cron del plugin son conservadores: el bloqueo de importación
(
Scheduler::LOCK_TTL) es de aproximadamente 40 minutos. Si un proceso se interrumpe a mitad de la ejecución, el bloqueo se libera automáticamente cuando el transient expira. La recuperación manual se describe en la documentación del programador. - La desinstalación siempre elimina las tablas de analíticas, vehículos y agentes de búsqueda
porque pueden contener datos personales o de visitantes. Los posts y
las opciones solo se eliminan cuando el administrador ha optado por ello a través del
ajuste
as24ci_delete_data_on_uninstall.
Resolución de problemas
- La activación no crea la página de Vehículos. Confirme que
as24ci_create_default_pagesestá establecido en1y que ningún tema u otro plugin está filtrandoas24ci_default_pages_enabledafalse. La página tampoco se vuelve a crear si ya existe una página con el mismo título; en ese caso, se reutiliza su ID. - Faltan capacidades personalizadas para un administrador. Visite cualquier
página de administración para que
maybe_upgrade_caps()pueda ejecutarse enadmin_init, o elimine temporalmenteas24ci_caps_versiondewp_optionspara forzar que la migración se vuelva a ejecutar. La migración se omite en solicitudes AJAX, REST y cron, por lo que debe ejecutarse durante una carga de página de administración real. - No se aplicó un paso de migración. Compruebe el valor de
as24ci_db_version. Si ya es igual al objetivo, la migración ya se ha ejecutado. Reduzca el valor manualmente solo si comprende las consecuencias para su instalación. - El archivo
/carsdevuelve un error 404 inmediatamente después de la activación. La activación ya llama aflush_rewrite_rules(). Si el archivo sigue sin ser accesible, visite Ajustes → Enlaces permanentes y guarde una vez para forzar a WordPress a reconstruir su caché de reescritura.