Documentatie · Technische documentatie
Plugin Bootstrap en Levenscyclus
Dit document beschrijft hoe de ADP Car Market Hub-plugin laadt, wat er gebeurt tijdens activering, deactivering en de-installatie, en welke migraties de plugin uitvoert tijdens het opstarten.
Wanneer u dit document moet gebruiken
Lees dit document als u het volgende moet doen:
- De volgorde traceren waarin de plugin-code wordt uitgevoerd tijdens een WordPress-verzoek.
- Begrijpen welke acties worden uitgevoerd bij activering en deactivering (rechten, standaardpagina's, aangepaste tabellen, geplande taken).
- Een upgrade plannen of problemen oplossen met een migratie die niet is toegepast.
- Beslissen waar u aangepaste code wilt inhaken (hooken) zodat deze wordt uitgevoerd nadat de services van de plugin beschikbaar zijn.
Overzicht
De plugin wordt gebootstrapt vanuit het hoofdbestand adp-car-market-hub.php. Dat bestand is bewust kort gehouden en voert alleen taken uit die moeten plaatsvinden op het moment dat het bestand wordt geladen. Alle functionaliteitscode wordt geladen via een autoloader in PSR-4-stijl en gekoppeld door de AS24CI\Plugin-singleton op de plugins_loaded-actie.
Constanten gedefinieerd bij het laden
adp-car-market-hub.php definieert de volgende constanten voordat er hooks worden uitgevoerd:
AS24CI_VERSION— Huidige plugin-versie (synchroon gehouden met de plugin-header enreadme.txt).AS24CI_PLUGIN_FILE— Absoluut pad naar het hoofdbestand van de plugin.AS24CI_PLUGIN_DIR— Map van de plugin (met afsluitende slash).AS24CI_PLUGIN_URL— URL naar de plugin-map, handig voor het in de wachtrij plaatsen (enqueuen) van assets.
Het bestand roept ook require_once AS24CI_PLUGIN_DIR . 'src/Core/Helpers.php' aan om gedeelde procedurele helpers te laden en definieert conditioneel de globale helpers as24ci_format() en as24ci_get_available_ai_models() als er niet eerder een functie met dezelfde naam is gedeclareerd.
Autoloader
Direct na de constanten registreert het bestand een kleine PSR-4-compatibele autoloader voor de AS24CI\-namespace. Klassennamen worden gekoppeld aan bestandsnamen in de vorm class-as24ci-<lower-dashed-name>.php. De autoloader zoekt eerst in includes/ en valt terug op includes/admin/ voor klassen die alleen voor de beheerder (admin) bedoeld zijn.
Hook-registratie bij het laden
Het hoofdbestand registreert de volgende hooks voordat er functionaliteitscode wordt uitgevoerd:
| Hook | Callback | Doel |
|---|---|---|
plugins_loaded (prioriteit 1) | as24ci_load_textdomain | Laadt het adp-car-market-hub-tekstdomein uit /languages. |
plugins_loaded (standaardprioriteit) | AS24CI\Plugin::init | Bouwt de singleton en registreert alle functionaliteitshooks. |
register_activation_hook | AS24CI\Plugin::activate | Wordt eenmalig uitgevoerd wanneer de plugin wordt geactiveerd. |
register_deactivation_hook | AS24CI\Plugin::deactivate | Wordt eenmalig uitgevoerd wanneer de plugin wordt gedeactiveerd. |
cron_schedules | as24ci_add_custom_cron_intervals | Registreert het aangepaste WP-Cron-interval as24ci_every_5_minutes (300 s). |
plugin_action_links_<basename> | as24ci_add_plugin_action_links | Voegt de links "Licentieactivering" en "Instellingen" toe aan het WordPress Plugins-scherm. |
plugin_row_meta | as24ci_add_plugin_row_meta | Voegt een link "Documentatie" toe aan de row meta van de plugin. |
Het hoofdbestand bootstrapt ook de Content Studio-module bij het laden, onafhankelijk van de AS24CI\Plugin-router:
register_activation_hook→AS24CI\Content_Studio_Repository::maybe_create_tables(maakt de Content Studio-tabellen aan bij activering).admin_menu(prioriteit 30) →AS24CI\Admin_Tab_Content_Studio::register_menu.plugins_loaded(prioriteit 20) →AS24CI\Content_Studio_Admin_Worker::register_hooks.
Het aangepaste WP-Cron-interval wordt onvoorwaardelijk geregistreerd, zodat WordPress er altijd van op de hoogte is, zelfs wanneer individuele functieschakelaars die er gebruik van maken zijn uitgeschakeld.
Bootstrap-volgorde (normaal verzoek)
Wanneer WordPress de plugin laadt tijdens een normaal verzoek, vinden de volgende stappen in deze volgorde plaats:
- Het hoofdbestand wordt ingesloten; constanten, autoloader en de hierboven vermelde hooks worden geregistreerd.
- WordPress activeert
plugins_loadedmet prioriteit 1:as24ci_load_textdomain()voertload_plugin_textdomain()uit zodat vertalingen beschikbaar zijn voordat er een vertaalbare string wordt gerenderd. - WordPress activeert
plugins_loadedmet de standaardprioriteit:AS24CI\Plugin::init()bouwt de singleton. - De constructor van
AS24CI\Plugin: - Instantieert de gedeelde services:Logger,Client,Image_Importer,Vehicle_Repository,Importer,Scheduler. - RoeptVehicle_Field_Resolver::set_repository()aan zodat de centrale veld-resolver kan lezen uit de voertuigentalbel. - RoeptVehicle_Deleter::set_repository()enVehicle_Deleter::register_hooks()aan zodat elk pad voor definitieve verwijdering (native WordPress, volledige synchronisatie van de importer, bulkactie) via een enkele, idempotente opschoning verloopt. - Roeptregister_hooks()aan om alle functies te koppelen voor het huidige verzoek. register_hooks()koppelt tweeadmin_init-callbacks (ze worden gekoppeld tijdensplugins_loadedmaar worden pas later geactiveerd opadmin_initinwp-admin): -AS24CI\Plugin::maybe_upgrade_caps()— zorgt ervoor dat rollen en rechten bestaan voor de huidige plugin-versie. -AS24CI\Plugin::maybe_upgrade()— voert optie-/datamigraties uit.register_hooks()registreert vervolgens de eigen hooks van elk subsysteem: - Altijd ingeschakeld: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(met dagelijks schema),Financing_Calculator,Rest_Api,Locations,Seller_Profile_Fields, plus de planner. De privateUpdateris hier ook gekoppeld, beperkt tot admin- / WP-Cron- / WP-CLI-contexten. - Beperkt door functie-opties opAS24CI\Options:Schema(plusSeo_Compatibility),Sitemap,Social_Share,Pdf_Datasheet,Favorites,Compare,Export,Bulk_Actions,Search_Agent. - Alleen voor beheerders (is_admin()is true): deAS24CI\Admin-controller,Admin_Team(CMH Team),Update_VisibilityenAdmin_Setup_Wizard, en — wanneerOptions::FEATURE_DASHBOARD_WIDGETis ingeschakeld — de dashboard-widget.- WordPress gaat verder met de rest van de levenscyclus van het verzoek. De meeste functionaliteitsklassen registreren aanvullende hooks op latere acties zoals
init(post-types, taxonomieën, tabelcreatie voor Search Agents),rest_api_init(REST-routes),wp_footer(analytics-trackingpixel) ofadmin_init(tabelupgrades alleen voor beheerders).
Activering
AS24CI\Plugin::activate() is geregistreerd met register_activation_hook en wordt eenmalig uitgevoerd wanneer een beheerder de plugin activeert. Het voert de volgende taken uit, in deze volgorde:
- Roept
seed_safe_defaults()aan, datadd_option()gebruikt om conservatieve standaardwaarden te installeren voor de eerste installatie. Bestaande waarden worden nooit overschreven. Belangrijke standaardwaarden: -as24ci_default_currency=EUR. -as24ci_default_post_status=draftzodat beheerders mappings kunnen controleren voordat ze worden gepubliceerd. -as24ci_max_images=30(een eindige limiet in plaats van onbeperkt). -as24ci_full_sync=0(definitief verwijderen blijft opt-in). - Gebruikersvriendelijke frontend-functies (sitemap, schema, favorieten, vergelijken, financiering, dashboard-widget, export, lazy loading, Layout Manager) zijn standaard ingeschakeld; tracking, externe, batch- en risicovolle functies (analytics, REST API, AI Assistant, social share, PDF-datasheet, proefrit) zijn standaard uitgeschakeld. - Roept
add_option( Options::SETUP_FIRST_ACTIVATION_AT, gmdate('c') )aan om de tijdstempel van de eerste activering vast te leggen, die wordt gebruikt door de Setup Wizard-beheerdersmelding. Omdatadd_option()niets doet wanneer de waarde al bestaat, behouden heractiveringen de oorspronkelijke datum. - Roept
ensure_roles_and_caps()aan, wat het volgende doet: - Maakt de rolas24ci_editoraan als deze nog niet bestaat. - Verleent de rechtensetas24ci_car/as24ci_carsaan zowelas24ci_editoralsadministrator. - Voegt het rechtmanage_as24_imports(de constantePlugin::CAP_MANAGE) uitsluitend toe aan beheerders. Dit recht beveiligt de UI van de importer, instellingen, tools en logs. - Stelt
as24ci_caps_versionin op1zodat de rechtenmigratie niet opnieuw wordt uitgevoerd bij volgende verzoeken. - Stelt
as24ci_db_versionin op5zodat de datamigraties gedefinieerd inmaybe_upgrade()worden overgeslagen bij een nieuwe installatie. - Roept
maybe_create_default_pages()aan om optioneel de pagina'sCars,Compare CarsenFavoritesaan te maken en hun post-ID's op te slaan inas24ci_page_archive_id,as24ci_page_compare_idenas24ci_page_favorites_id. Dit gedrag wordt gestuurd door de optieas24ci_create_default_pagesen de filtersas24ci_default_pages_enabledenas24ci_default_pages. - Roept
Analytics::maybe_create_table()aan om de analytics-tabel aan te maken. - Roept
Vehicle_Repository::maybe_create_table()aan om de specifieke voertuigentabel aan te maken. - Plant de dagelijkse opschoning van de analytics-retentie (
as24ci_daily_cleanup) als deze nog niet is gepland. - Roept
License_Manager::ensure_cron_scheduled()aan om de dagelijkse licentie-hervalidatietaak (as24ci_license_refresh) te plannen. - Roept
CPT::register_post_type()en vervolgensflush_rewrite_rules()aan zodat het/cars-archief onmiddellijk na activering werkt. - Logt
Plugin activated (v<version>).viaAS24CI\Logger.
De Content Studio-tabellen worden aangemaakt door een afzonderlijke activeringshook (Content_Studio_Repository::maybe_create_tables) die is geregistreerd in het hoofdbestand van de plugin, niet door Plugin::activate().
activate() vult bewust geen standaard API-URL's in. Ontbrekende configuratie wordt zichtbaar gemaakt via de systeemstatus- / gezondheids-UI en via clientfouten wanneer de importer wordt uitgevoerd.
Rechten- en datamigraties
Er zijn twee statische methoden gekoppeld aan admin_init (niet plugins_loaded) om bestaande installaties synchroon te houden met de huidige plugin-versie. Door in te haken op admin_init wordt voorkomen dat de plugbare authenticatiestack bij elk verzoek vroegtijdig moet worden geladen:
maybe_upgrade_caps()— Gekoppeld aanadmin_init. Deze methode beschermt tegen AJAX-, cron- en REST-verzoeken (en keert in die contexten vroegtijdig terug) en gebruikt een statische beveiliging per verzoek, zodat de migratie maximaal één keer wordt uitgevoerd. Deze is niet afhankelijk vanmanage_options. Vergelijktas24ci_caps_versionmet de doelwaarde (1op het moment van schrijven) en voertensure_roles_and_caps()indien nodig opnieuw uit.maybe_upgrade()— Gekoppeld aanadmin_init; keert vroegtijdig terug tenzijis_admin(). Vergelijktas24ci_db_versionmet de doelwaarde (5) en past eventuele openstaande migratiestappen toe. Elke stap is idempotent:- Migratie 1: alleen een markering, geen gegevenswijzigingen.
- Migratie 2: dwingt de optie voor toestemming voor analytics (
Options::ANALYTICS_REQUIRE_CONSENT) op0. Beheerders kunnen dit weer inschakelen via de instellingen-UI. - Migratie 3: migreert de verouderde optie
FINANCING_PLACEMENTnaar de nieuwe Layout Manager-zones. De migratie schrijft alleen naar een Layout Manager-zone als die zone nog niet is opgeslagen, zodat bestaande lay-outs behouden blijven. - Migratie 4: past
seed_safe_defaults()opnieuw toe zodat bestaande installaties eventuele nieuwe veilige standaardwaarden ontvangen zonder waarden te overschrijven die de beheerder al heeft ingesteld. - Migratie 5: beschermt onversleutelde geheimen in rust. Omkeerbare geheimen (
Options::CLIENT_SECRET,Options::HUB_API_KEY,Options::WEBHOOK_SECRET) worden verpakt viaSecrets::encrypt(), en het cron-token (Options::CRON_TOKEN) wordt vervangen door de bijbehorende HMAC-hash met sleutel viaSecrets::hash_token(). De migratie is idempotent (al beschermde rijen worden overgeslagen) en het gecachte OAuth-bearer-token wordt gewist, zodat het opnieuw wordt opgeslagen via het gecodeerde pad. Na alle toepasselijke stappen wordt de optie bijgewerkt naar de huidige doelversie.
Deactivatie
AS24CI\Plugin::deactivate() wordt eenmalig uitgevoerd wanneer een beheerder de plugin deactiveert. Bestaande gegevens blijven behouden. De methode:
- Roept
wp_clear_scheduled_hook( Scheduler::CRON_HOOK )aan om openstaandeas24ci_scheduled_import-events te verwijderen. - Roept
wp_clear_scheduled_hook( Analytics::ANALYTICS_CLEANUP_CRON_HOOK )aan om het dagelijkse retentie-event voor analytics te verwijderen. - Roept
Ai_Assistant::clear_ai_queue_schedule()aan om het cron-event voor de AI-wachtrij op de achtergrond te verwijderen. - Roept
Pricing_Engine::clear_schedule()aan om het dagelijkse cron-event voor de pricing-engine te verwijderen. - Roept
License_Manager::clear_cron()aan om het dagelijkse event voor licentie-herverificatie (as24ci_license_refresh) te verwijderen. - Roept
wp_clear_scheduled_hook( 'as24ci_competitor_watcher_cron' )aan uitsluitend als legacy-opschoning — de functie Competitor Watcher (en de bijbehorende class) is verwijderd; de hook-naam is hier hardcoded opgenomen, zodat eventuele achtergebleven geplande events op installaties die zijn geüpgraded van oudere versies nog steeds worden gewist. - Verwijdert de transient
Scheduler::LOCK_TRANSIENT(as24ci_cron_import_running) voor het geval de plugin wordt gedeactiveerd terwijl er een import actief is. - Roept
flush_rewrite_rules()aan en logtPlugin deactivated..
Omdat deactivatie de databasetafels, custom post types of opties niet aanraakt, herstelt het opnieuw activeren van de plugin de eerdere status.
Deinstallatie
Wanneer de plugin wordt verwijderd uit het WordPress-beheer (en dus niet alleen gedeactiveerd), voert WordPress de functie uninstall.php uit. Het script:
- Laadt
AS24CI\Options(als het bestand bestaat) zodat de definitieve lijst met optiesleutels kan worden afgeleid vanOptions::get_all_keys(), plus een kleine set aanvullende sleutels (as24ci_models_cache_keys,as24ci_page_archive_id,as24ci_page_compare_iden de legacyas24ci_api_total_cache). Er wordt een hardcoded fallback-lijst gebruikt als de class niet kan worden geladen. - Verwijdert plugin-transients (
as24ci_access_token,as24ci_cron_import_running,as24ci_image_queue_running). - Verwijdert geplande events voor
as24ci_scheduled_importenas24ci_daily_cleanupuit de planning. - Leest de optie
as24ci_delete_data_on_uninstall. Wanneer de waarde1is, verwijdert het script: - Alleas24ci_car-berichten (geforceerd). - Alle bijlage-ID's die zijn opgeslagen in de_as24ci_image_idspostmeta van elke auto. Handmatige galerijbijlagen (_as24ci_manual_image_ids) worden bewust niet verwijderd. - De uitgelichte afbeelding (featured image) van elke auto (defensieve opschoning). - Alleas24ci_lead-berichten. - De bij activatie aangemaakte pagina's Cars, Compare en Favorites. - Verwijdert altijd de custom tabellen (ongeacht de opt-in vlag):
-
{$wpdb->prefix}as24ci_analytics-{$wpdb->prefix}as24_vehicles-{$wpdb->prefix}as24ci_search_agents-{$wpdb->prefix}as24ci_content_studio_assets-{$wpdb->prefix}as24ci_content_studio_jobsDe bijbehorende schema-versie-opties (as24ci_vehicles_db_version,as24ci_search_agent_db_version,as24ci_content_studio_db_version) worden eveneens verwijderd. - Verwijdert alle verzamelde optiesleutels voor de site.
- Op multisite-installaties wordt dezelfde routine eenmaal per site uitgevoerd via
switch_to_blog().
Configuratiereferentie
Het bootstrap- en levenscyclusgedrag wordt beïnvloed door de volgende opties (allemaal gedefinieerd als constanten op AS24CI\Options). De volledige catalogus is gedocumenteerd in het document Opslag van opties en instellingen; hier worden alleen de voor de levenscyclus relevante vermeldingen weergegeven.
| Optiesleutel | Constante | Gebruikt door |
|---|---|---|
as24ci_caps_version | Options::CAPS_VERSION | maybe_upgrade_caps() om te bepalen of capabilities moeten worden uitgevoerd. |
as24ci_db_version | Options::DB_VERSION | maybe_upgrade() om te bepalen welke migraties moeten worden toegepast. |
as24ci_create_default_pages | Options::CREATE_DEFAULT_PAGES | maybe_create_default_pages() tijdens activatie. |
as24ci_page_archive_id | n.v.t. | Slaat het ID op van de bij activatie aangemaakte Cars-pagina. |
as24ci_page_compare_id | n.v.t. | Slaat het ID op van de bij activatie aangemaakte Compare-pagina. |
as24ci_page_favorites_id | n.v.t. | Slaat het ID op van de bij activatie aangemaakte Favorites-pagina. |
as24ci_delete_data_on_uninstall | Options::DELETE_DATA_ON_UNINSTALL | uninstall.php om te bepalen of inhoud moet worden verwijderd. |
Operationele opmerkingen
register_activation_hookwordt alleen geactiveerd wanneer een beheerder de plugin activeert via het scherm Plugins. Het bijwerken van de plugin-bestanden activeert de activatie niet; dat is de reden waarommaybe_upgrade()bestaat.- Omdat
maybe_upgrade()enmaybe_upgrade_caps()zijn gekoppeld aanadmin_initen alleen worden uitgevoerd tijdens het laden van echte beheerpagina's (niet via AJAX, REST of cron), betalen verzoeken die alleen voor de frontend zijn niet de prijs van migratiecontroles. De eerste keer dat een beheerpagina wordt geladen na een update, wordt eventuele openstaande migratie toegepast. - De WP-Cron lock-TTL's van de plugin zijn conservatief: de import-lock (
Scheduler::LOCK_TTL) is ongeveer 40 minuten. Als een proces halverwege wordt afgebroken, wordt de lock automatisch vrijgegeven wanneer de transient verloopt. Handmatig herstel wordt beschreven in de documentatie over de planner. - De deinstallatie verwijdert altijd de tabellen voor analytics, voertuigen en zoekagenten, omdat deze persoonlijke gegevens of bezoekersgegevens kunnen bevatten. Berichten en opties worden alleen verwijderd wanneer de beheerder hiervoor heeft gekozen via de instelling
as24ci_delete_data_on_uninstall.
Probleemoplossing
- Activatie maakt de Cars-pagina niet aan. Controleer of
as24ci_create_default_pagesis ingesteld op1en dat er geen thema of andere plugin is dieas24ci_default_pages_enabledfiltert naarfalse. De pagina wordt ook niet opnieuw aangemaakt als er al een pagina met dezelfde titel bestaat; in dat geval wordt het ID daarvan hergebruikt. - Custom capabilities ontbreken voor een beheerder. Bezoek een willekeurige beheerpagina zodat
maybe_upgrade_caps()kan worden uitgevoerd opadmin_init, of verwijder tijdelijkas24ci_caps_versionuitwp_optionsom de migratie opnieuw te forceren. De migratie wordt overgeslagen bij AJAX-, REST- en cron-verzoeken, dus deze moet worden uitgevoerd tijdens het laden van een echte beheerpagina. - Een migratiestap is niet toegepast. Controleer de waarde van
as24ci_db_version. Als deze al gelijk is aan het doel, is de migratie al uitgevoerd. Verlaag de waarde alleen handmatig als u de gevolgen voor uw installatie begrijpt. - Het archief
/carsgeeft direct na activatie een 404-fout. Activatie roept alflush_rewrite_rules()aan. Als het archief nog steeds niet bereikbaar is, ga dan naar Instellingen → Permalinks en sla deze eenmalig op om WordPress te dwingen de rewrite-cache opnieuw op te bouwen.