Dokumentation · Technische Dokumentation
Architektur-Übersicht
Dieses Dokument beschreibt die übergeordnete Architektur des ADP Car Market Hub WordPress-Plugins: wie der Quellcode organisiert ist, welche Klassen die Hauptverantwortung tragen und wie die wichtigsten Funktionen zur Laufzeit miteinander verknüpft sind.
Wann Sie dieses Dokument lesen sollten
Lesen Sie dieses Dokument, wenn Sie:
- Einen Überblick über die PHP-Codebasis des Plugins erhalten möchten, bevor Sie in ein bestimmtes Subsystem eintauchen.
- Verstehen möchten, welche Klasse für eine bestimmte Funktion verantwortlich ist.
- Eine Anpassung, Integration oder Code-Review planen.
Für die schrittweise Bootstrap-Reihenfolge siehe Plugin-Bootstrap und Lebenszyklus. Für Speicherdetails siehe Datenmodell und Datenbankschema.
Übersicht
Das Plugin ist in PHP implementiert und folgt den Standard-Konventionen für WordPress-Plugins. Es verwendet:
- Eine einzelne Root-Datei (
adp-car-market-hub.php), die Plugin-Konstanten definiert, einen Autoloader registriert und Bootstrap-Callbacks einhängt. - Einen PHP-Namespace
AS24CI\für alle Klassen. - Die Core-APIs von WordPress für Custom Post Types, Taxonomien, Optionen,
WP-Cron, REST-API, AJAX-Handler und von
dbDeltaverwaltete benutzerdefinierte Tabellen. - Ein zentrales
AS24CI\Plugin-Singleton, das jede Funktion beimplugins_loaded-Hook miteinander verknüpft.
Verzeichnisstruktur auf oberster Ebene
Das Repository ist wie folgt organisiert (es sind nur Verzeichnisse aufgeführt, die für die Laufzeitarchitektur relevant sind):
adp-car-market-hub.php– Haupt-Plugin-Datei. Definiert Konstanten, registriert den Autoloader, lädt die Textdomain, registriert Aktivierungs-/Deaktivierungs-Hooks, registriert benutzerdefinierte WP-Cron-Intervalle und initialisiert dasAS24CI\Plugin-Singleton beiplugins_loaded.includes/– Gemeinsam genutzte und Frontend-PHP-Klassen, eine Klasse pro Datei. Dateinamen folgen dem Musterclass-as24ci-<name>.phpund werden über den Autoloader zur KlasseAS24CI\<Name>aufgelöst.includes/admin/– Nur für den Admin-Bereich bestimmte PHP-Klassen (Einstellungs-Tabs, List-Table-Hilfsklassen, Dashboard-Widgets). Werden vom selben Autoloader als Fallback aufgelöst, wenn eine Klasse unterincludes/nicht gefunden wird.src/Core/Helpers.php– Gemeinsam genutzte prozedurale Hilfsfunktionen, die bedingungslos aus der Haupt-Plugin-Datei geladen werden.templates/– Frontend-Templates und Template-Teile, die von Themes überschrieben werden können.assets/– CSS, JavaScript und Bilder für Admin und Frontend.languages/– Übersetzungsdateien; die Textdomain lautetadp-car-market-hub.uninstall.php– Wird ausgeführt, wenn das Plugin aus WordPress gelöscht wird, und entfernt Plugin-Optionen sowie (optional) importierte Inhalte.
Autoloader
adp-car-market-hub.php registriert einen kleinen PSR-4-kompatiblen Autoloader
für den Präfix AS24CI\. Klassennamen werden in die Dateinamenskonvention
class-as24ci-<lower-case-name-with-dashes>.php konvertiert. Der
Autoloader sucht zuerst in includes/ und dann in includes/admin/,
sodass gemeinsam genutzte und nur für den Admin-Bereich bestimmte Klassen denselben Namespace nutzen können.
Kernklassen und ihre Verantwortlichkeiten
Die folgenden Klassen bilden das Rückgrat des Plugins. Namen sind
in ihrer vollqualifizierten Form (AS24CI\<Class>) geschrieben.
Bootstrap und gemeinsam genutzte Dienste
AS24CI\Plugin– Singleton-Einstiegspunkt. Erstellt die gemeinsam genutzten Dienstinstanzen (Logger,Client,Image_Importer,Vehicle_Repository,Importer,Scheduler), verknüpft alle WordPress-Hooks für den aktiven Funktionsumfang und stellt die statischen Callbacksactivate()/deactivate()/init()bereit.AS24CI\Logger– Leichtgewichtiger Logger, der im gesamten Plugin für Importer- und Scheduler-Meldungen verwendet wird.AS24CI\Options– Zentrales Register für Optionsschlüssel, die als Klassenkonstanten bereitgestellt werden (z. B.Options::DB_VERSION,Options::DEFAULT_CURRENCY,Options::AUTO_IMPORT_ENABLED). Das Skriptuninstall.phpverwendetOptions::get_all_keys(), um Optionen beim Löschen des Plugins zu bereinigen.
Daten und Speicherung
AS24CI\CPT– Registriert den Custom Post Typeas24ci_carmit benutzerdefinierter Berechtigungszuordnung (as24ci_car/as24ci_cars) und der kombinierten Metabox „AutoScout24 API Import“.AS24CI\Taxonomies– Registriert die 15 Fahrzeugattribut-Taxonomien, die anas24ci_carangehängt sind (Marke, Modell, Karosserieform, Kraftstoffart, Getriebe, Antrieb, Zustand, Außen-/Innenfarbe, Schadstoffklasse, Energielabel, Fahrzeugkategorie, Garantieart, Garantiedetails, Zylinderanordnung).AS24CI\Leads_CPT– Registriert den Custom Post Typeas24ci_lead, der zum Speichern von Kontaktformular-Anfragen verwendet wird, mit Statuskonstanten fürnew,contacted,closedundspam.AS24CI\Vehicle_Repository– Repository für die dedizierte benutzerdefinierte Tabelle{$wpdb->prefix}as24_vehicles, die Fahrzeugfelddaten enthält (anstelle vonwp_postmeta). Bietet Schema-Verwaltung (maybe_create_table()), CRUD-Hilfsklassen sowie Filter-/Sortierungs-Whitelists, die vonfind()verwendet werden.AS24CI\Vehicle_Field_Resolver– Zentraler Reader, der Fahrzeugfelder auflöst, indem er Repository-Daten mit manuellen Überschreibungen kombiniert. Wird während der Instanziierung vonPluginüberVehicle_Field_Resolver::set_repository()verknüpft.AS24CI\Vehicle_Deleter– Einziger, idempotenter Bereinigungspfad, der verwendet wird, wann immer ein Fahrzeug dauerhaft gelöscht wird (natives WP-Löschen, Importer-Vollsynchronisations-Löschen, Massenaktion). Wird während der Instanziierung vonPluginverknüpft.
Import-Pipeline
AS24CI\Client– HTTP-Client für die AutoScout24-API. Übernimmt die Authentifizierung und die Ausführung von Anfragen.AS24CI\Mapper– Ordnet eingehende AutoScout24-Fahrzeugdaten der internen Feldstruktur zu, die vom Repository verwendet wird, und schreibt die Postmeta_as24ci_listing_idfür Abwärtskompatibilität.AS24CI\Importer– Koordiniert den Import pro Fahrzeug: ruft Daten überClientab, transformiert sie überMapper, speichert Fahrzeuge über das Repository und verfolgt die Änderungserkennung über die Postmeta-Schlüssel_as24ci_content_hashund_as24ci_images_hash.AS24CI\Image_Importer– Lädt Fahrzeugbilder herunter und hängt sie an, optional unter Konvertierung in WebP. Speichert Attachment-IDs in der Postmeta_as24ci_image_ids.AS24CI\Scheduler– Verwaltet die WP-Cron-Hooksas24ci_scheduled_importundas24ci_image_queue_process, die Ausführungssperren-Transients (as24ci_cron_import_running,as24ci_image_queue_running) und das manuelle Batch-Wizard-Warteschlangen-Transientas24ci_batch_queue. Derselbe Ablaufrun_import()wird von WP-Cron, dem REST-Cron-Endpunkt und dem Admin-Button „Jetzt ausführen“ verwendet.AS24CI\Cron_Endpoint– REST-Endpunkt, der es externen Servern ermöglicht, Importe über eine token-gesicherte URL auszulösen.
Frontend, SEO und Integrationen
AS24CI\Templates– Leitet Fahrzeug-Archiv- und Einzelansichts-Templates durch den Template-Loader des Plugins, was Theme-Überschreibungen ermöglicht.AS24CI\Assets– Registriert und reiht CSS- und JavaScript-Bundles für Admin und Frontend in die Warteschlange ein.AS24CI\Archive_Filters– Rendert die Benutzeroberfläche des Archivfilters und wendet Abfrageänderungen basierend auf der Benutzerauswahl an.AS24CI\Schema– Fügt strukturierte Daten von Schema.org sowie Open Graph / Twitter Card Meta-Tags zu einzelnen Fahrzeugseiten hinzu. Optional, gesteuert durchOptions::FEATURE_SCHEMA.AS24CI\Sitemap– Integriert Fahrzeuge in die Core-Sitemap von WordPress und ist kompatibel mit Yoast und Rank Math. Optional, gesteuert durchOptions::FEATURE_SITEMAP.AS24CI\Social_Share,AS24CI\Pdf_Datasheet,AS24CI\Favorites,AS24CI\Compare,AS24CI\Export,AS24CI\Bulk_Actions,AS24CI\Financing_Calculator,AS24CI\Test_Drive,AS24CI\Search_Agent– Optionale Funktionen, die jeweils ihre eigenen Hooks registrieren. Die meisten werden durch einenOptions::FEATURE_*-Schalter gesteuert (sieheseed_safe_defaults()inAS24CI\Pluginfür die Standardeinstellungen bei einer Neuinstallation).AS24CI\Webhooks– Ausgehende Webhooks für CRM- und Integrations-Anwendungsfälle.AS24CI\Rest_Api– Öffentliche REST-API für Fahrzeugangebote, gesteuert durchOptions::REST_API_ENABLED.AS24CI\Analytics– Tracking von Seitenaufrufen, Filtern und Leads. Verwaltet die Tabelle{$wpdb->prefix}as24ci_analyticsund den Aufbewahrungs-Cronas24ci_daily_cleanup.AS24CI\Ai_Assistant– Generiert KI-Beschreibungen, SEO-Metadaten und Ausstattungs-Highlights unter Verwendung der verwalteten Google Gemini-Konfiguration, die vonAS24CI\Ai_Configbereitgestellt wird. Der Gemini-Schlüssel des Kunden wird Server-zu-Server von der API-Plattform bereitgestellt und verschlüsselt überAS24CI\Ai_Credential_Managergespeichert; im Admin-Bereich kann kein Anbieter, Modell oder API-Schlüssel ausgewählt werden.AS24CI\Data_Quality_Scanner– Optionaler Taxonomie-Tippfehler-Detektor, der die KI-Integration nutzt.AS24CI\Pricing_Engine– Tägliche Preisanalyse, die über den Hookas24ci_pricing_analysis_cronausgeführt wird.AS24CI\Locations,AS24CI\Seller_Profile_Fields– Standorte des Autohauses, Öffnungszeiten und Verkäuferprofil-Metadaten.AS24CI\Team/AS24CI\Admin_Team– CMH-Team: Verkaufsansprechpartner des Autohauses, die keine WordPress-Benutzerkonten benötigen. Die Speicherung basiert auf Optionen (keine benutzerdefinierte Tabelle oder CPT); Kontakte werden inOptions::TEAM_MEMBERSund zugehörigen Optionsschlüsseln gespeichert, was dem MusterLocationsentspricht.Admin_Teamregistriert ein eigenes übergeordnetes Admin-Menü.AS24CI\License_Manager,AS24CI\License_Client,AS24CI\License_Refresh_Signal,AS24CI\License_Signal_Secret— Lizenz- / verwaltete Zugriffsebene der ADP Car Market Hub-API-Plattform.License_Managerverwaltet den täglichen Re-Validierungs-Cron (as24ci_license_refresh), die Speicherung von Funktionsrechten, die Steuerung von operativen/KI-Schreibpfaden und Admin-Hinweise.License_Refresh_Signalstellt den eingehenden EndpunktPOST /as24ci/v1/license-refresh-signalbereit.AS24CI\Ai_Credential_Manager– Speichert und entschlüsselt die Gemini-Anmeldedaten des Kunden, die von der API-Plattform bereitgestellt werden.- Content Studio (
AS24CI\Content_Studio_*, z. B.Content_Studio_Repository,Content_Studio_Options,Content_Studio_Admin_Worker,Admin_Tab_Content_Studio) – Ein weitgehend eigenständiges Modul, das Marketing-Inhalte aus bestehenden Fahrzeugdaten generiert. Es verwaltet seine eigenen Tabellen (as24ci_content_studio_jobs,as24ci_content_studio_assets), seine eigenenas24ci_content_studio_*-Optionen sowie einen Hintergrund-Worker und wird direkt aus der Haupt-Plugin-Datei statt über den RouterAdmininitialisiert. Es liest bestehende Fahrzeug-/Importdaten schreibgeschützt.
Admin-Benutzeroberfläche
AS24CI\Admin– Übergeordneter Admin-Controller, der nur instanziiert wird, wennis_admin()wahr ist. Setzt intern Tab-Klassen ausincludes/admin/zusammen (Importer, Einstellungen, Mapping, Design, Layout-Manager, Leads, KI-Assistent, Systemstatus usw.).AS24CI\Dashboard_Widget– Optionales WordPress-Dashboard-Widget, gesteuert durchOptions::FEATURE_DASHBOARD_WIDGET.
Funktionsschalter und „sichere Ersteinrichtung“
Die meisten nicht essenziellen Funktionen werden in
AS24CI\Plugin::register_hooks() konditional registriert, basierend auf Optionen, deren Konstanten
in AS24CI\Options definiert sind (zum Beispiel FEATURE_SCHEMA,
FEATURE_SITEMAP, FEATURE_FAVORITES, FEATURE_COMPARE,
FEATURE_PDF_DATASHEET, REST_API_ENABLED, AI_ASSISTANT_ENABLED,
ANALYTICS_ENABLED, TEST_DRIVE_ENABLED).
Bei einer Neuinstallation setzt das Plugin konservative Standardwerte über
AS24CI\Plugin::seed_safe_defaults(). Datenschutzrelevante, externe oder
Batch-Funktionen sind standardmäßig deaktiviert; frontend-freundliche Funktionen (Sitemap,
Schema, Favoriten, Vergleich, Finanzierungsrechner, Dashboard-Widget,
Export, Lazy Loading, Layout-Manager) sind standardmäßig aktiviert. Bestehende
Installationen werden niemals überschrieben, da der Seeder add_option() verwendet.
Speicherlayout (High-Level)
Das Plugin verwendet drei Speicherebenen:
- Eigene Datenbanktabellen, die über
dbDeltaverwaltet werden: -{$wpdb->prefix}as24_vehicles— Fahrzeugfelddaten, im Besitz vonAS24CI\Vehicle_Repository. -{$wpdb->prefix}as24ci_analytics— Analyse-Ereignisse, im Besitz vonAS24CI\Analytics. -{$wpdb->prefix}as24ci_search_agents— Suchauftrags-Abonnements, im Besitz vonAS24CI\Search_Agent. -{$wpdb->prefix}as24ci_content_studio_jobsund{$wpdb->prefix}as24ci_content_studio_assets— Content Studio-Jobs und generierte Assets, im Besitz vonAS24CI\Content_Studio_Repository. - WordPress-Beiträge und Postmeta:
-
as24ci_car-Beiträge bilden die Grundlage für die WordPress-Permalinks, Taxonomien und Templates für jedes Fahrzeug. Eine kleine Auswahl an Postmeta-Schlüsseln verbleibt aus Gründen der Abwärtskompatibilität inwp_postmeta(zum Beispiel_as24ci_listing_id,_as24ci_content_hash,_as24ci_images_hash,_as24ci_image_ids,_as24ci_manual_image_ids). -as24ci_lead-Beiträge speichern Kontaktformular-Anfragen, deren Status in_as24ci_lead_statushinterlegt ist. wp_options— Alle vom Benutzer konfigurierbaren Einstellungen. Schlüssel sind als Konstanten inAS24CI\Optionsdefiniert (und für das Content Studio inAS24CI\Content_Studio_Options). Schema-Versionen für die eigenen Tabellen werden ebenfalls als Optionen gespeichert (as24ci_db_version,as24ci_vehicles_db_version,as24ci_search_agent_db_version,as24ci_content_studio_db_version). CMH-Teamkontakte werden ebenfalls in den Optionen gespeichert (as24ci_team_*).
Details auf Spaltenebene finden Sie im Datenbankschema. Für das logische Entitätsmodell und das Zusammenspiel zwischen Postmeta und der eigenen Tabelle siehe Datenmodell.
Laufzeit-Ablauf im Überblick
Eine typische Anfrage durchläuft die folgenden Phasen (vereinfacht):
- WordPress lädt
adp-car-market-hub.php, was die Plugin-Konstanten definiert, den Autoloader registriert und eigene WP-Cron-Intervalle hinzufügt. - Bei
plugins_loaded(Priorität 1) wird die Textdomain geladen. - Bei
plugins_loaded(Standardpriorität) wirdAS24CI\Plugin::init()ausgeführt, instanziiert das Singleton und registriert alle Hooks für aktive Funktionen. - Feature-Klassen registrieren ihre eigenen Hooks bei
init,rest_api_init,wp_ajax_*,wp_footerusw. - Nachfolgende Aktivitäten (ein Cron-Lauf, eine REST-Anfrage, ein Frontend-Seitenaufruf) werden von den registrierten Hooks verarbeitet.
Betriebshinweise
- Das Plugin setzt die im Plugin-Header deklarierten WordPress- und PHP-Versionen
voraus (
Requires at least: 6.2,Requires PHP: 8.1). Ältere Versionen werden nicht unterstützt. - Die meisten Subsysteme verwenden
wpdbnur dann direkt, wenndbDeltadas erforderliche Schema oder die Abfrage nicht abbilden kann. Direkte Abfragen sind auf Repository-, Analyse-, Suchagenten- und Deinstallations-Code beschränkt. - Die Architektur trennt das Frontend-Rendering bewusst vom Datenimport. Der Importer rendert niemals Templates; die Templates lösen niemals Netzwerkanfragen an AutoScout24 aus.
- Das Plugin fügt über den Filter
plugin_action_links_<basename>einen „Einstellungen“-Link zu seiner Zeile in der WordPress-Plugin-Übersicht (WordPress) hinzu.
Fehlerbehebung
- Eine Funktion scheint sich nicht zu registrieren. Überprüfen Sie den entsprechenden
Options::FEATURE_*-Schalter. Die Methoderegister_hooks()inAS24CI\Pluginüberspringt deaktivierte Funktionen. - Eine Klasse wird nicht gefunden. Überprüfen Sie die Namenskonvention für Dateien
(
class-as24ci-<lower-dashed-name>.php) und ob sich die Datei inincludes/oderincludes/admin/befindet. Der Autoloader sucht nur in diesen beiden Verzeichnissen. - Auf eine reine Admin-Klasse wird vom Frontend aus verwiesen. Admin-Klassen werden vom Autoloader bei Bedarf geladen, hängen jedoch möglicherweise von reinen Admin-Globals oder -Berechtigungen ab. Überprüfen Sie das Verhalten in der aktuellen Plugin-Version, bevor Sie sich darauf verlassen.