Ce projet WordPress développé par CISN (Compagnie Immobilière du Sud de Nantes) vise à :
/cisn_pericles)programme wp_leizee_lot, wp_leizee_annexe../cisn_pericles wp_pericles_annonce/api/sync
Le système utilise une requête UNION complexe dans functions-biens.php:searchBiens() pour interroger simultanément :
pericles_annonce leizee_lotCette architecture permet une recherche transparente sur l'ensemble du catalogue.
wp-content/themes/ ├── functions-biens.php (★ logique de recherche unifiée) ├── page-recherche.php (interface de recherche) ├── parts/ │ ├── detail-annonce-hektor.php (template biens anciens) │ ├── detail-annonce-leizee.php (template biens neufs) │ └── detail-annonce-autre.php (template générique) └── css/, js/, blocks/ wp-content/plugins/wia-leizee/ ├── wia-leizee.php └── inc/classes/wia_leizee_import-class.php (★ import API Leizee)
searchBiens($r, $save = TRUE)P = Hektor/Périclès → detail-annonce-hektor.phpL = Leizee → detail-annonce-leizee.phptemplate_include dans functions-biens.php:125leizee_lot et leizee_annexeastraga_wia_leizee_lot pour post-traitementLa recherche combine intelligemment deux sources :
-- Exemple simplifié de la logique UNION SELECT * FROM pericles_annonce WHERE [filtres Hektor] UNION SELECT * FROM leizee_lot WHERE [filtres Leizee adaptés]
Adaptations par source :
pv (Hektor) vs prix_valeur (Leizee) surf_hab vs surface_totale_numberville_rattachementgetRealCityNames() pour normalisation des nomsville_rattachement + jointures sur CPTs WordPresswp_leizee_lot ( idlot, ville_nom, ville_lat, ville_lon, ville_rattachement, prix_valeur, surface_totale_number, nb_pieces, dispositif_aide ) wp_leizee_annexe ( idlot, idtype, libelle, surface )
wp_pericles_annonce ( no_asp, pv, surf_hab, nb_pce, ville, type_bien, TRANSACTION )
wia_leizee_import_before)leizee_lot via action astraga_wia_leizee_lotwia_leizee_should_skip)../cisn_pericles/api/sync pour déclenchement manuelpericles_annonce
La fonction searchBiens() constitue le cœur du système. Elle génère une requête complexe combinant deux sources :
function searchBiens($r, $save = TRUE) { global $wpdb, $question, $map, $typesBiens; // 1. Construction des filtres Hektor $where = array(); $where['type'] = 'type_bien IN (...)'; $where['lieu'] = 'ville = "..."'; $where['prix'] = 'pv BETWEEN ... AND ...'; // 2. Adaptation pour Leizee $whereLeizee = $where; $whereLeizee['prix'] = str_replace('pv ', 'prix_valeur ', $where['prix']); $whereLeizee['lieu'] = '(ville_nom IN (...) OR ville_rattachement IN (...))'; // 3. UNION des deux requêtes $sql = "SELECT * FROM pericles_annonce WHERE " . implode(' AND ', $where) . " UNION SELECT * FROM leizee_lot WHERE " . implode(' AND ', $whereLeizee); }
$map = array( 'prix' => 'pv', // Hektor 'loyer' => 'loyer_cc', // Hektor 'ville' => 'ville', // Hektor ); // Adaptation automatique pour Leizee : // 'pv' → 'prix_valeur' // 'surf_hab' → 'surface_totale_number' // 'nb_pce' → 'nb_pieces'
Gestion géographique Leizee :
if (isset($whereLeizee['lieu'])) { $whereLeizee['lieu'] = '( ville_nom IN (' . $cities . ') OR ville_rattachement IN (' . $cities . ') OR idlot IN ( -- Jointure complexe avec les CPT WordPress ville select w.meta_value from wp_postmeta w where w.meta_key="wia_leizee_lot_idlot" and w.post_id in (...) ) )'; }
Dispositifs d'aide :
if ($dispositif === 1) { // BRS $where['dispositif'] = 'dispositif_aide = 21'; } elseif ($dispositif === 2) { // PSLA $where['dispositif'] = 'dispositif_aide = 4'; }
/api/search : Recherche unifiée de biens/api/sync : Import données Hektor/Périclès/api/rappeler : Demande de rappel/api/contacter : Contact agence/api/envoi-fiche : Envoi fiche bien[programmes] : Liste programmes Leizee avec pagination[calculateur_mensualites] : Simulateur mensualités[calculateur_emprunt] : Simulateur capacité emprunt$cspWhitelist = [ 'cisn.immo', 'leizee.com', 'google.com', 'openstreetmap.org', 'estimator.cityscan.fr' ];
idlot, ville_nom, prix_valeur (Leizee)wia_leizee_*/api/sync avec retours JSON