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 en readme.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:

HookCallbackDoel
plugins_loaded (prioriteit 1)as24ci_load_textdomainLaadt het adp-car-market-hub-tekstdomein uit /languages.
plugins_loaded (standaardprioriteit)AS24CI\Plugin::initBouwt de singleton en registreert alle functionaliteitshooks.
register_activation_hookAS24CI\Plugin::activateWordt eenmalig uitgevoerd wanneer de plugin wordt geactiveerd.
register_deactivation_hookAS24CI\Plugin::deactivateWordt eenmalig uitgevoerd wanneer de plugin wordt gedeactiveerd.
cron_schedulesas24ci_add_custom_cron_intervalsRegistreert het aangepaste WP-Cron-interval as24ci_every_5_minutes (300 s).
plugin_action_links_<basename>as24ci_add_plugin_action_linksVoegt de links "Licentieactivering" en "Instellingen" toe aan het WordPress Plugins-scherm.
plugin_row_metaas24ci_add_plugin_row_metaVoegt 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_hookAS24CI\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:

  1. Het hoofdbestand wordt ingesloten; constanten, autoloader en de hierboven vermelde hooks worden geregistreerd.
  2. WordPress activeert plugins_loaded met prioriteit 1: as24ci_load_textdomain() voert load_plugin_textdomain() uit zodat vertalingen beschikbaar zijn voordat er een vertaalbare string wordt gerenderd.
  3. WordPress activeert plugins_loaded met de standaardprioriteit: AS24CI\Plugin::init() bouwt de singleton.
  4. De constructor van AS24CI\Plugin: - Instantieert de gedeelde services: Logger, Client, Image_Importer, Vehicle_Repository, Importer, Scheduler. - Roept Vehicle_Field_Resolver::set_repository() aan zodat de centrale veld-resolver kan lezen uit de voertuigentalbel. - Roept Vehicle_Deleter::set_repository() en Vehicle_Deleter::register_hooks() aan zodat elk pad voor definitieve verwijdering (native WordPress, volledige synchronisatie van de importer, bulkactie) via een enkele, idempotente opschoning verloopt. - Roept register_hooks() aan om alle functies te koppelen voor het huidige verzoek.
  5. register_hooks() koppelt twee admin_init-callbacks (ze worden gekoppeld tijdens plugins_loaded maar worden pas later geactiveerd op admin_init in wp-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.
  6. 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 private Updater is hier ook gekoppeld, beperkt tot admin- / WP-Cron- / WP-CLI-contexten. - Beperkt door functie-opties op AS24CI\Options: Schema (plus Seo_Compatibility), Sitemap, Social_Share, Pdf_Datasheet, Favorites, Compare, Export, Bulk_Actions, Search_Agent. - Alleen voor beheerders (is_admin() is true): de AS24CI\Admin-controller, Admin_Team (CMH Team), Update_Visibility en Admin_Setup_Wizard, en — wanneer Options::FEATURE_DASHBOARD_WIDGET is ingeschakeld — de dashboard-widget.
  7. 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) of admin_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:

  1. Roept seed_safe_defaults() aan, dat add_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 = draft zodat 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.
  2. 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. Omdat add_option() niets doet wanneer de waarde al bestaat, behouden heractiveringen de oorspronkelijke datum.
  3. Roept ensure_roles_and_caps() aan, wat het volgende doet: - Maakt de rol as24ci_editor aan als deze nog niet bestaat. - Verleent de rechtenset as24ci_car / as24ci_cars aan zowel as24ci_editor als administrator. - Voegt het recht manage_as24_imports (de constante Plugin::CAP_MANAGE) uitsluitend toe aan beheerders. Dit recht beveiligt de UI van de importer, instellingen, tools en logs.
  4. Stelt as24ci_caps_version in op 1 zodat de rechtenmigratie niet opnieuw wordt uitgevoerd bij volgende verzoeken.
  5. Stelt as24ci_db_version in op 5 zodat de datamigraties gedefinieerd in maybe_upgrade() worden overgeslagen bij een nieuwe installatie.
  6. Roept maybe_create_default_pages() aan om optioneel de pagina's Cars, Compare Cars en Favorites aan te maken en hun post-ID's op te slaan in as24ci_page_archive_id, as24ci_page_compare_id en as24ci_page_favorites_id. Dit gedrag wordt gestuurd door de optie as24ci_create_default_pages en de filters as24ci_default_pages_enabled en as24ci_default_pages.
  7. Roept Analytics::maybe_create_table() aan om de analytics-tabel aan te maken.
  8. Roept Vehicle_Repository::maybe_create_table() aan om de specifieke voertuigentabel aan te maken.
  9. Plant de dagelijkse opschoning van de analytics-retentie (as24ci_daily_cleanup) als deze nog niet is gepland.
  10. Roept License_Manager::ensure_cron_scheduled() aan om de dagelijkse licentie-hervalidatietaak (as24ci_license_refresh) te plannen.
  11. Roept CPT::register_post_type() en vervolgens flush_rewrite_rules() aan zodat het /cars-archief onmiddellijk na activering werkt.
  12. Logt Plugin activated (v<version>). via AS24CI\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 aan admin_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 van manage_options. Vergelijkt as24ci_caps_version met de doelwaarde (1 op het moment van schrijven) en voert ensure_roles_and_caps() indien nodig opnieuw uit.
  • maybe_upgrade() — Gekoppeld aan admin_init; keert vroegtijdig terug tenzij is_admin(). Vergelijkt as24ci_db_version met 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) op 0. Beheerders kunnen dit weer inschakelen via de instellingen-UI.
  • Migratie 3: migreert de verouderde optie FINANCING_PLACEMENT naar 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 via Secrets::encrypt(), en het cron-token (Options::CRON_TOKEN) wordt vervangen door de bijbehorende HMAC-hash met sleutel via Secrets::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:

  1. Roept wp_clear_scheduled_hook( Scheduler::CRON_HOOK ) aan om openstaande as24ci_scheduled_import-events te verwijderen.
  2. Roept wp_clear_scheduled_hook( Analytics::ANALYTICS_CLEANUP_CRON_HOOK ) aan om het dagelijkse retentie-event voor analytics te verwijderen.
  3. Roept Ai_Assistant::clear_ai_queue_schedule() aan om het cron-event voor de AI-wachtrij op de achtergrond te verwijderen.
  4. Roept Pricing_Engine::clear_schedule() aan om het dagelijkse cron-event voor de pricing-engine te verwijderen.
  5. Roept License_Manager::clear_cron() aan om het dagelijkse event voor licentie-herverificatie (as24ci_license_refresh) te verwijderen.
  6. 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.
  7. Verwijdert de transient Scheduler::LOCK_TRANSIENT (as24ci_cron_import_running) voor het geval de plugin wordt gedeactiveerd terwijl er een import actief is.
  8. Roept flush_rewrite_rules() aan en logt Plugin 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:

  1. Laadt AS24CI\Options (als het bestand bestaat) zodat de definitieve lijst met optiesleutels kan worden afgeleid van Options::get_all_keys(), plus een kleine set aanvullende sleutels (as24ci_models_cache_keys, as24ci_page_archive_id, as24ci_page_compare_id en de legacy as24ci_api_total_cache). Er wordt een hardcoded fallback-lijst gebruikt als de class niet kan worden geladen.
  2. Verwijdert plugin-transients (as24ci_access_token, as24ci_cron_import_running, as24ci_image_queue_running).
  3. Verwijdert geplande events voor as24ci_scheduled_import en as24ci_daily_cleanup uit de planning.
  4. Leest de optie as24ci_delete_data_on_uninstall. Wanneer de waarde 1 is, verwijdert het script: - Alle as24ci_car-berichten (geforceerd). - Alle bijlage-ID's die zijn opgeslagen in de _as24ci_image_ids postmeta van elke auto. Handmatige galerijbijlagen (_as24ci_manual_image_ids) worden bewust niet verwijderd. - De uitgelichte afbeelding (featured image) van elke auto (defensieve opschoning). - Alle as24ci_lead-berichten. - De bij activatie aangemaakte pagina's Cars, Compare en Favorites.
  5. 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_jobs De bijbehorende schema-versie-opties (as24ci_vehicles_db_version, as24ci_search_agent_db_version, as24ci_content_studio_db_version) worden eveneens verwijderd.
  6. Verwijdert alle verzamelde optiesleutels voor de site.
  7. 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.

OptiesleutelConstanteGebruikt door
as24ci_caps_versionOptions::CAPS_VERSIONmaybe_upgrade_caps() om te bepalen of capabilities moeten worden uitgevoerd.
as24ci_db_versionOptions::DB_VERSIONmaybe_upgrade() om te bepalen welke migraties moeten worden toegepast.
as24ci_create_default_pagesOptions::CREATE_DEFAULT_PAGESmaybe_create_default_pages() tijdens activatie.
as24ci_page_archive_idn.v.t.Slaat het ID op van de bij activatie aangemaakte Cars-pagina.
as24ci_page_compare_idn.v.t.Slaat het ID op van de bij activatie aangemaakte Compare-pagina.
as24ci_page_favorites_idn.v.t.Slaat het ID op van de bij activatie aangemaakte Favorites-pagina.
as24ci_delete_data_on_uninstallOptions::DELETE_DATA_ON_UNINSTALLuninstall.php om te bepalen of inhoud moet worden verwijderd.

Operationele opmerkingen

  • register_activation_hook wordt 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 waarom maybe_upgrade() bestaat.
  • Omdat maybe_upgrade() en maybe_upgrade_caps() zijn gekoppeld aan admin_init en 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_pages is ingesteld op 1 en dat er geen thema of andere plugin is die as24ci_default_pages_enabled filtert naar false. 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 op admin_init, of verwijder tijdelijk as24ci_caps_version uit wp_options om 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 /cars geeft direct na activatie een 404-fout. Activatie roept al flush_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.

Gerelateerde documenten