Documentation · Documentation technique
Aperçu de l'architecture
Ce document décrit l'architecture de haut niveau du plugin ADP Car Market Hub WordPress : comment l'arborescence des sources est organisée, quelles classes portent les principales responsabilités et comment les fonctionnalités majeures sont connectées entre elles au moment de l'exécution.
Quand utiliser ce document
Lisez ce document si vous devez :
- Obtenir un aperçu de la base de code PHP du plugin avant de vous plonger dans un sous-système spécifique.
- Comprendre quelle classe est responsable d'une fonctionnalité donnée.
- Planifier une personnalisation, une intégration ou une revue de code.
Pour l'ordre d'initialisation étape par étape, voir Plugin Bootstrap And Lifecycle. Pour les détails de stockage, voir Data Model et Database Schema.
Aperçu
Le plugin est implémenté en PHP et suit les conventions standard des plugins WordPress. Il utilise :
- Un seul fichier racine (
adp-car-market-hub.php) qui définit les constantes du plugin, enregistre un chargeur automatique (autoloader) et accroche les rappels d'initialisation (bootstrap). - Un espace de noms PHP
AS24CI\pour toutes les classes. - Les API de base de WordPress pour les types de publication personnalisés (CPT), les taxonomies, les options,
WP-Cron, l'API REST, les gestionnaires AJAX et les tables personnalisées gérées par
dbDelta. - Un singleton central
AS24CI\Pluginqui connecte chaque fonctionnalité sur l'actionplugins_loaded.
Structure des répertoires de premier niveau
Le dépôt est organisé comme suit (seuls les répertoires pertinents pour l'architecture d'exécution sont listés) :
adp-car-market-hub.php— fichier principal du plugin. Définit les constantes, enregistre l'autoloader, charge le domaine de texte, enregistre les hooks d'activation/désactivation, enregistre les intervalles WP-Cron personnalisés et initialise le singletonAS24CI\Pluginsurplugins_loaded.includes/— classes PHP partagées et frontend, une classe par fichier. Les noms de fichiers suivent le modèleclass-as24ci-<name>.phpet se résolvent vers la classeAS24CI\<Name>via l'autoloader.includes/admin/— classes PHP réservées à l'administration (onglets de réglages, assistants de listes de tables, widgets du tableau de bord). Résolues par le même autoloader en tant que solution de repli lorsqu'une classe n'est pas trouvée sousincludes/.src/Core/Helpers.php— assistants procéduraux partagés chargés inconditionnellement depuis le fichier principal du plugin.templates/— modèles frontend et parties de modèles qui peuvent être surchargés par les thèmes.assets/— CSS, JavaScript et images pour l'administration et le frontend.languages/— fichiers de traduction ; le domaine de texte estadp-car-market-hub.uninstall.php— s'exécute lorsque le plugin est supprimé de WordPress et supprime les options du plugin et (facultativement) le contenu importé.
Autoloader
adp-car-market-hub.php enregistre un petit autoloader compatible PSR-4
pour le préfixe AS24CI\. Les noms de classes sont convertis selon la convention de nommage de fichiers class-as24ci-<lower-case-name-with-dashes>.php. Le
chargeur automatique cherche d'abord dans includes/ puis dans includes/admin/,
ce qui permet aux classes partagées et réservées à l'administration de partager un espace de noms unique.
Classes de base et leurs responsabilités
Les classes suivantes forment l'épine dorsale du plugin. Les noms sont
écrits sous leur forme pleinement qualifiée (AS24CI\<Class>).
Initialisation et services partagés
AS24CI\Plugin— Point d'entrée du singleton. Construit les instances de services partagés (Logger,Client,Image_Importer,Vehicle_Repository,Importer,Scheduler), connecte tous les hooks WordPress pour l'ensemble de fonctionnalités actives et expose les rappels statiquesactivate()/deactivate()/init().AS24CI\Logger— Enregistreur (logger) léger utilisé dans tout le plugin pour les messages de l'importateur et du planificateur.AS24CI\Options— Registre centralisé des clés d'options exposées sous forme de constantes de classe (par exempleOptions::DB_VERSION,Options::DEFAULT_CURRENCY,Options::AUTO_IMPORT_ENABLED). Le scriptuninstall.phputiliseOptions::get_all_keys()pour nettoyer les options lors de la suppression du plugin.
Données et stockage
AS24CI\CPT— Enregistre le type de publication personnaliséas24ci_caravec un mappage de capacités personnalisé (as24ci_car/as24ci_cars) et la boîte de méta (metabox) combinée "AutoScout24 API Import".AS24CI\Taxonomies— Enregistre les 15 taxonomies d'attributs de véhicules associées àas24ci_car(marque, modèle, type de carrosserie, type de carburant, transmission, transmission intégrale, état, couleur extérieure/intérieure, norme d'émission, étiquette énergétique, catégorie de véhicule, type de garantie, détails de la garantie, disposition des cylindres).AS24CI\Leads_CPT— Enregistre le type de publication personnaliséas24ci_leadutilisé pour stocker les soumissions de formulaires de contact, avec des constantes de statut pournew,contacted,closedetspam.AS24CI\Vehicle_Repository— Répertoire pour la table personnalisée dédiée{$wpdb->prefix}as24_vehiclesqui contient les données de champs de véhicules (au lieu dewp_postmeta). Fournit la gestion du schéma (maybe_create_table()), des assistants CRUD et des listes blanches de filtrage/tri utilisées parfind().AS24CI\Vehicle_Field_Resolver— Lecteur centralisé qui résout les champs de véhicules en combinant les données du répertoire avec les surcharges manuelles. Connecté lors de la construction dePluginviaVehicle_Field_Resolver::set_repository().AS24CI\Vehicle_Deleter— Chemin de nettoyage unique et idempotent utilisé chaque fois qu'un véhicule est définitivement supprimé (suppression native WP, suppression par synchronisation complète de l'importateur, action groupée). Connecté lors de la construction dePlugin.
Pipeline d'importation
AS24CI\Client— Client HTTP pour l'API AutoScout24. Gère l'authentification et l'exécution des requêtes.AS24CI\Mapper— Mappe les charges utiles d'annonces AutoScout24 entrantes vers la structure de champ interne utilisée par le répertoire et écrit le postmeta_as24ci_listing_idpour la compatibilité ascendante.AS24CI\Importer— Coordonne l'importation par annonce : récupère les données viaClient, les transforme viaMapper, enregistre les véhicules via le répertoire et suit la détection des changements grâce aux clés postmeta_as24ci_content_hashet_as24ci_images_hash.AS24CI\Image_Importer— Télécharge et associe les images des véhicules, en les convertissant éventuellement en WebP. Stocke les ID de pièces jointes dans le postmeta_as24ci_image_ids.AS24CI\Scheduler— Détient les hooks WP-Cronas24ci_scheduled_importetas24ci_image_queue_process, les transients de verrouillage d'exécution (as24ci_cron_import_running,as24ci_image_queue_running) et le transient de file d'attente manuelle de l'assistant de lot (Batch-Wizard)as24ci_batch_queue. Le même fluxrun_import()est utilisé par WP-Cron, le point de terminaison cron REST et le bouton "Lancer maintenant" de l'administration.AS24CI\Cron_Endpoint— Point de terminaison REST qui permet aux serveurs externes de déclencher des importations via une URL sécurisée par jeton.
Frontend, SEO et intégrations
AS24CI\Templates— Oriente les modèles d'archives et de véhicules uniques à travers le chargeur de modèles du plugin, permettant des surcharges par le thème.AS24CI\Assets— Enregistre et met en file d'attente les bundles CSS et JavaScript de l'administration et du frontend.AS24CI\Archive_Filters— Génère l'interface utilisateur du filtre d'archive et applique les modifications de requête en fonction des sélections de l'utilisateur.AS24CI\Schema— Ajoute des données structurées Schema.org et des balises méta Open Graph / Twitter Card aux pages de véhicules uniques. Optionnel, conditionné parOptions::FEATURE_SCHEMA.AS24CI\Sitemap— Intègre les véhicules dans le plan du site (sitemap) de base de WordPress et est compatible avec Yoast et Rank Math. Optionnel, conditionné parOptions::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— Fonctionnalités optionnelles qui enregistrent chacune leurs propres hooks. La plupart sont conditionnées par une activationOptions::FEATURE_*(voirseed_safe_defaults()dansAS24CI\Pluginpour les valeurs par défaut fournies lors d'une nouvelle installation).AS24CI\Webhooks— Webhooks sortants pour les cas d'utilisation de CRM et d'intégration.AS24CI\Rest_Api— API REST publique pour les annonces de véhicules, conditionnée parOptions::REST_API_ENABLED.AS24CI\Analytics— Suivi des pages vues, des filtres et des leads. Détient la table{$wpdb->prefix}as24ci_analyticset le cron de rétentionas24ci_daily_cleanup.AS24CI\Ai_Assistant— Génère des descriptions par IA, des métadonnées SEO et des points forts d'équipements en utilisant la configuration gérée de Google Gemini exposée parAS24CI\Ai_Config. La clé Gemini du client est transmise de serveur à serveur par l'API Platform et stockée de manière chiffrée viaAS24CI\Ai_Credential_Manager; aucun fournisseur, modèle ou clé API n'est sélectionnable dans l'interface d'administration.AS24CI\Data_Quality_Scanner— Détecteur de fautes de frappe dans les taxonomies optionnel qui utilise l'intégration de l'IA.AS24CI\Pricing_Engine— Analyse quotidienne des prix qui s'exécute sur le hookas24ci_pricing_analysis_cron.AS24CI\Locations,AS24CI\Seller_Profile_Fields— Emplacements des concessions, horaires d'ouverture et métadonnées du profil du vendeur.AS24CI\Team/AS24CI\Admin_Team— CMH Team : contacts commerciaux de la concession qui ne nécessitent pas de comptes d'utilisateurs WordPress. Le stockage est basé sur les options (pas de table personnalisée ni de CPT) ; les contacts sont conservés dansOptions::TEAM_MEMBERSet les clés d'options associées, reflétant le modèleLocations.Admin_Teamenregistre un menu d'administration dédié de premier niveau.AS24CI\License_Manager,AS24CI\License_Client,AS24CI\License_Refresh_Signal,AS24CI\License_Signal_Secret— Licence de l'API Platform ADP Car Market Hub / couche d'accès géré.License_Managerdétient le cron de revalidation quotidienne (as24ci_license_refresh), le stockage des droits d'accès aux fonctionnalités, le contrôle des chemins d'écriture opérationnels/IA et les notifications d'administration.License_Refresh_Signalexpose le point de terminaison entrantPOST /as24ci/v1/license-refresh-signal.AS24CI\Ai_Credential_Manager— Stocke et déchiffre l'identifiant Gemini du client fourni par l'API Platform.- Content Studio (
AS24CI\Content_Studio_*, par exempleContent_Studio_Repository,Content_Studio_Options,Content_Studio_Admin_Worker,Admin_Tab_Content_Studio) — Un module largement autonome qui génère du contenu marketing à partir des données de véhicules existantes. Il possède ses propres tables (as24ci_content_studio_jobs,as24ci_content_studio_assets), ses propres optionsas24ci_content_studio_*et un processus d'arrière-plan, et est initialisé à partir du fichier principal du plugin plutôt que du routeurAdmin. Il lit les données existantes de véhicules/importations en lecture seule.
Interface d'administration
AS24CI\Admin— Contrôleur d'administration de premier niveau, instancié uniquement lorsqueis_admin()est vrai. Compose en interne les classes d'onglets deincludes/admin/(importateur, réglages, mapping, design, gestionnaire de mise en page, leads, Assistant IA, état du système, etc.).AS24CI\Dashboard_Widget— Widget de tableau de bord WordPress optionnel, conditionné parOptions::FEATURE_DASHBOARD_WIDGET.
Boutons d'activation des fonctionnalités et "première configuration sécurisée"
La plupart des fonctionnalités non essentielles sont enregistrées de manière conditionnelle dans
AS24CI\Plugin::register_hooks() sur la base d'options dont les constantes sont
définies sur AS24CI\Options (par exemple FEATURE_SCHEMA,
FEATURE_SITEMAP, FEATURE_FAVORITES, FEATURE_COMPARE,
FEATURE_PDF_DATASHEET, REST_API_ENABLED, AI_ASSISTANT_ENABLED,
ANALYTICS_ENABLED, TEST_DRIVE_ENABLED).
Lors d'une nouvelle installation, le plugin injecte des valeurs par défaut prudentes via
AS24CI\Plugin::seed_safe_defaults(). Les fonctionnalités liées à la confidentialité, externes ou
de traitement par lots sont désactivées par défaut ; les fonctionnalités adaptées au frontend (plan du site,
schéma, favoris, comparaison, calculateur de financement, widget de tableau de bord,
exportation, chargement différé, gestionnaire de mise en page) sont activées par défaut. Les
installations existantes ne sont jamais écrasées car l'injecteur utilise
add_option().
Structure de stockage (haut niveau)
Le plugin utilise trois couches de stockage :
- Tables de base de données personnalisées gérées via
dbDelta: -{$wpdb->prefix}as24_vehicles— données des champs de véhicules, détenues parAS24CI\Vehicle_Repository. -{$wpdb->prefix}as24ci_analytics— événements d'analyse, détenus parAS24CI\Analytics. -{$wpdb->prefix}as24ci_search_agents— abonnements aux alertes de recherche, détenus parAS24CI\Search_Agent. -{$wpdb->prefix}as24ci_content_studio_jobset{$wpdb->prefix}as24ci_content_studio_assets— tâches et ressources générées du Content Studio, détenues parAS24CI\Content_Studio_Repository. - Publications et postmeta WordPress :
- Les publications
as24ci_carsoutiennent les permaliens, taxonomies et modèles WordPress pour chaque véhicule. Un petit ensemble de clés postmeta reste danswp_postmetapour des raisons de compatibilité ascendante (par exemple_as24ci_listing_id,_as24ci_content_hash,_as24ci_images_hash,_as24ci_image_ids,_as24ci_manual_image_ids). - Les publicationsas24ci_leadstockent les soumissions de formulaires de contact avec un statut stocké dans_as24ci_lead_status. wp_options— Tous les réglages configurables par l'utilisateur. Les clés sont définies comme des constantes surAS24CI\Options(et, pour le Content Studio, surAS24CI\Content_Studio_Options). Les versions de schéma pour les tables personnalisées sont également stockées en tant qu'options (as24ci_db_version,as24ci_vehicles_db_version,as24ci_search_agent_db_version,as24ci_content_studio_db_version). Les contacts de la CMH Team sont également stockés dans les options (as24ci_team_*).
Pour les détails au niveau des colonnes, voir le Schéma de la base de données. Pour le modèle d'entité logique et la manière dont les postmeta et la table personnalisée interagissent, voir le Modèle de données.
Flux d'exécution en un coup d'œil
Une requête typique passe par les étapes suivantes (simplifiées) :
- WordPress charge
adp-car-market-hub.php, qui définit les constantes du plugin, enregistre l'autoloader et ajoute des intervalles WP-Cron personnalisés. - Sur
plugins_loaded(priorité 1), le domaine de texte est chargé. - Sur
plugins_loaded(priorité par défaut),AS24CI\Plugin::init()s'exécute, instancie le singleton et enregistre tous les hooks pour les fonctionnalités actives. - Les classes de fonctionnalités enregistrent leurs propres hooks sur
init,rest_api_init,wp_ajax_*,wp_footer, etc. - L'activité ultérieure (une exécution de cron, une requête REST, un affichage de page frontend) est gérée par les hooks enregistrés.
Notes opérationnelles
- Le plugin suppose les versions de WordPress et PHP déclarées dans
l'en-tête du plugin (
Requires at least: 6.2,Requires PHP: 8.1). Les versions inférieures ne sont pas prises en charge. - La plupart des sous-systèmes utilisent directement
wpdbuniquement lorsquedbDeltane peut pas exprimer le schéma ou la requête requis. Les requêtes directes sont limitées au code du dépôt, de l'analyse, de l'agent de recherche et de désinstallation. - L'architecture sépare délibérément le rendu frontend de l'importation des données. L'importateur ne restitue jamais de modèles ; les modèles ne déclenchent jamais de requêtes réseau vers AutoScout24.
- Le plugin ajoute un lien « Réglages » à sa ligne sur l'écran des extensions
WordPress via le filtre
plugin_action_links_<basename>.
Dépannage
- Une fonctionnalité ne semble pas s'enregistrer. Vérifiez le commutateur
Options::FEATURE_*correspondant. La méthoderegister_hooks()dansAS24CI\Pluginignore les fonctionnalités désactivées. - Une classe est introuvable. Vérifiez la convention de nommage des fichiers
(
class-as24ci-<lower-dashed-name>.php) et assurez-vous que le fichier réside dansincludes/ouincludes/admin/. L'autoloader recherche uniquement dans ces deux répertoires. - Une classe réservée à l'administration est référencée depuis le frontend. Les classes d'administration sont chargées à la demande par l'autoloader, mais elles peuvent dépendre de variables globales ou de capacités réservées à l'administration. Vérifiez le comportement dans la version actuelle du plugin avant de vous y fier.