IA + WordPress : Pourquoi j’ai choisi la puissance de Laravel
Je suis développeur chez Rentilot, une plateforme de gestion immobilière. Et je dois avouer : créer une bonne annonce immobilière, c’est long. Et time consuming si vous n’avez pas une routine établie.
Un propriétaire ou un agent doit écrire un titre accrocheur, détailler le bien, ajuster les prix, respecter les limitations de chaque portail (LeBoncoin accepte 70 caractères, SeLoger en accepte 90), adapter le ton pour chaque audience…
J’ai pensé : « Et si l’IA faisait ça pour nous ? »
Mais il y avait un problème. Rentilot fonctionne sous WordPress avec Laravel intégré via Acorn de Roots.io. C’est une architecture hybride puissante, mais personne ne parlait de comment ajouter de l’IA dedans.
J’ai trouvé la solution. Et je vais te montrer comment je l’ai fait.
Pourquoi Laravel AI ? Pourquoi Acorn ?
Avant de plonger dans le code, comprends pourquoi j’ai fait ces choix.
Laravel AI est une nouvelle couche d’abstraction créée par Taylor Otwell (créateur de Laravel). Au lieu de choisir entre OpenAI, Gemini, Anthropic ou d’autres, tu utilises une seule interface. C’est comme avoir un traducteur universel : change de fournisseur sans réécrire ton code.
Acorn AI, c’est l’extension de Acorn (l’adaptation de Laravel pour WordPress) qui apporte Laravel AI directement dans WordPress. C’est là que la magie opère.
Pourquoi c’est important ?
- Je pouvais utiliser la puissance de Laravel dans un projet WordPress
- Je conservais la structure de WordPress (plugins, thèmes, architecture familière)
- Je pouvais tester plusieurs fournisseurs d’IA simultanément
- C’était modulaire et facile à maintenir
L’Architecture que j’ai construite
Imagine que tu dois expliquer à quelqu’un comment créer une annonce parfaite. Tu lui donnerais :
- Le contexte : « Voici les infos du bien »
- Les vérifications : « Assure-toi que tout est complet »
- Les instructions : « Voici comment faire l’annonce »
- Un plan B : « Si ça ne marche pas, fais une version simple »
C’est exactement ce que j’ai construit. Avec trois services Laravel :
Service 1 : PropertyAdContextService
Celui-ci assemble toutes les données du bien en un contexte cohérent :
- Le titre, la surface, l’adresse
- Les loyers (hors charges, avec charges, dépôt de garantie)
- La classe énergétique (DPE, GES)
- L’environnement : les transports à proximité, les commerces, les écoles
- Le type de contrat s’il y en a un
Tout ça vient d’une seule fiche bien. Service le récupère donc, l’organise, et prépare ce contexte pour l’IA.
Service 2 : PropertyAdComplianceService
C’est mon contrôleur qualité. Il vérifie :
- Tous les champs obligatoires sont-ils présents ? (titre, surface, prix, classe énergétique)
- Y a-t-il des avertissements ? (description manquante, informations incomplètes)
Pourquoi c’est crucial ? Parce qu’on n’envoie pas une demande bancale à l’IA. On s’assure d’abord que les données valent le coup.
Service 3 : PropertyAdGeneratorService
C’est le chef d’orchestre. Il :
- Appelle le service de conformité
- Prépare les options (quel portail ? quel ton ?)
- Demande à l’IA de générer l’annonce
- Si l’IA échoue, génère automatiquement une annonce de secours
Pourquoi le fallback ? Parce que je voulais que ça marche toujours. Même si Gemini est down, l’utilisateur obtient une annonce correcte.
Comment j’ai configuré l’IA pour WordPress
Voici la partie « simple mais cruciale ».
Dans mon fichier .env, j’ajoute :
GEMINI_API_KEY=sk-xxx...
AI_LISTINGS_PROVIDER=gemini
AI_LISTINGS_MODEL=gemini-2.5-flash-lite
Dans Acorn, la configuration se live dans config/ai.php. Je dis à Laravel :
- Quel fournisseur utiliser par défaut
- Quelles clés API j’ai disponibles
- Quel modèle préférer pour les annonces
C’est ça. Acorn gère le reste.
Le Prompt : Donner les bonnes instructions à l’IA
Ici, c’est où j’ai appris quelque chose d’important : l’IA n’est aussi bonne que tes instructions.
Je demande à l’IA :
Tu es copywriter immobilier français.
Règles strictes:
- N'invente JAMAIS une information absente du contexte.
- Utilise uniquement les données fournies.
- Reste clair, concret, vendeur sans exagération.
- Structure attendue: accroche, description du bien, chiffres, accès/transports.
Et je lui dis aussi : « Retourne uniquement du JSON valide ».
Pourquoi du JSON ? Parce que je dois parser la réponse et adapter chaque annonce au format exact de LeBonCoin, SeLoger, etc.
Adapter l’annonce à chaque portail
Voilà un détail que beaucoup oublient : chaque portail a ses règles.
- LeBonCoin : titre court (70 chars max), format énumératif, accents sur les points clés
- SeLoger : titre plus long (90 chars), structure plus détaillée, sections bien délimitées
Mon service génère DEUX versions de l’annonce simultanément. L’IA comprend que LeBonCoin demande un titre court, SeLoger un titre plus long. Elle adapte aussi le style : direct et concis pour LeBonCoin, plus narratif pour SeLoger.
L’utilisateur, lui, clique un bouton. Il récupère deux annonces optimisées pour chaque réseau. C’est transparent.
Le cas d’étude Rentilot : Du concept à la production
Chez Rentilot, j’ai implémenté ça avec trois options que l’utilisateur contrôle :
1. Le portail :
- LeBonCoin seul
- SeLoger seul
- Les deux
2. Le ton de l’annonce :
- Neutre : « informatif et direct »
- Chaleureux : « ça donne envie de visiter »
- Premium : « valorisant, haut de gamme »
3. Inclure le quartier :
- Oui : utilise les transports et points d’intérêt proches
- Non : génère une annonce minimale
Ça donne à chaque propriétaire la flexibilité qu’il cherche. Un agent peut générer une annonce premium pour un bel immeuble à Paris, et une annonce neutre pour un studio dans une petite ville.
Le problème que j’ai rencontré (et comment je l’ai résolu)
Voici la partie où je suis tombé sur un bug subtil.
WordPress et Laravel définissent tous les deux une fonction global __() pour les traductions. WordPress l’utilise pour sa localisation. Laravel a la sienne.
Quand j’ai intégré Acorn AI, les deux généraient une collision. WordPress arrêtait de traduire correctement. Les filtres ne fonctionnaient plus.
J’ai cherché pendant deux jours. Puis j’ai trouvé : Composer chargeait les helpers de Laravel après les helpers de WordPress, les surchargeant.
La solution ? Un patch.
J’ai créé un script simple scripts/patch-composer-autoload.php qui :
- Ouvre le fichier d’autoload de Composer
- Cherche la ligne qui charges les helpers Laravel
- La supprime
<?php
$pattern = '/^.*laravel\/framework\/src\/Illuminate\/Foundation\/helpers\.php.*\R/m';
$patched = preg_replace($pattern, '', $contents);
Puis j’ai ajouté ça dans mon script de déploiement :
- name: Patch Composer autoload for Acorn helper collision
command: php scripts/patch-composer-autoload.php
args:
chdir: "{{ deploy_helper.new_release_path }}"
- name: Run Acorn optimize
command: wp acorn optimize
Ça s’exécute avant l’optimisation Acorn, donc tout fonctionne après. WordPress retrouve sa traduction. Laravel AI fonctionne. Tout le monde est content.
C’est un détail technique, mais c’est le type de détail qui peut prendre des semaines si tu ne sais pas où chercher. Je te le partage pour que tu aies la réponse si tu rencontres la même collision.
Comment ça fonctionne en pratique : un scénario réel
Un propriétaire vient d’ajouter un nouvel appartement 2-pièces dans Rentilot.
- Il clique « Générer une annonce »
- Le système récupère toutes les infos : 45m², 800€ HC, 100€ charges, classe D, métro à 200m, boulangerie à 100m
- Mon service compile tout ça en contexte
- L’IA reçoit : « Voici un 2-pièces de 45m². Ton job : écris deux annonces (LeBonCoin et SeLoger), ton chaleureux »
- Gemini génère en 2-3 secondes
- Le propriétaire reçoit deux annonces prêtes à copier-coller
- Il les poste sur les portails
Et si l’API Gemini était down ? Pas de problème. Le fallback génère une annonce correcte en 100ms.
Les avantages concrets
Depuis que c’est en production :
- Économie de temps : une annonce se génère en 3 secondes vs 20-30 minutes avant
- Cohérence : toutes les annonces respectent le format de chaque portail
- Résilience : ça fonctionne toujours, IA ou pas
- Coût minimal : ~0,05€ par appel Gemini, donc ~5€ pour 100 annonces/mois
Ce que j’ai appris
En intégrant Laravel AI dans WordPress, j’ai découvert trois choses importantes :
- Acorn AI change le jeu : c’est vraiment ça qui rend possible l’intégration Laravel-WordPress simplement
- Les détails techniques importent : le patch Composer semble bête, mais c’était bloquant
- Le fallback sauve des vies : avoir un plan B transforme une feature « cool » en feature « fiable »
Évolutions futures
Je réfléchis à plusieurs améliorations :
- Mise en cache des annonces : redis cache pour éviter de regénérer si le bien ne change pas
- Intégration directe aux portails : poster automatiquement sur LeBonCoin et SeLoger
- A/B testing des tons : générer 3 versions (neutre, chaleureux, premium) et voir laquelle convert le mieux
- Analyse du feedback : apprendre des annonces qui gener du visionnage vs celles qui ne convertissent pas
Conclusion : Pourquoi tu devrais explorer ça
Si tu gères une plateforme WordPress et que tu veux ajouter de la puissance Laravel (ou juste de l’IA), voici ce que tu dois retenir :
Acorn AI + Laravel AI = possibilités infinies dans WordPress.
J’avais un problème concret (générer des annonces rapidement). J’ai trouvé les bons outils. J’ai intégré ça proprement. Rentilot vit mieux. Les utilisateurs sont heureux.
C’est ça l’important : pas la technology pour la technology, mais la technology qui résout des vrais problèmes.
Si tu dois intégrer de l’IA dans WordPress, commence par Acorn AI. Tu me remercieras dans deux semaines quand ça sera en production.
Qu'est-ce que Acorn AI ?
Acorn AI est l’extension d’Acorn (adaptation Laravel pour WordPress) qui apporte Laravel AI directement dans WordPress, permettant d’utiliser OpenAI, Gemini, Anthropic, etc.
Comment intégrer Laravel AI dans WordPress ?
Utilisez Acorn de Roots.io comme couche d’abstraction. Acorn intègre Laravel nativement dans WordPress et supporte Laravel AI depuis la dernière version.
Quel est le problème de collision Composer ?
WordPress et Laravel définissent tous deux la fonction __() globale. Composer chargeait les helpers Laravel en dernier, les surchargeant. Solution : patch l’autoload pour supprimer la ligne Laravel.
Conversation
0 commentaires
Une question, un retour d’expérience ou une nuance utile ? Ajoute ton point de vue.
Pas encore de commentaires. Lance la discussion.