Créer un store locator dans WordPress avec les custom post type et Google Map

Il est à noter que ce module n’est en aucun temps « Plug and play » et qu’il nécessite un minimum de connaissance en programmation.
Je n’ai jamais été satisfait des extensions disponibles à l’heure actuelle pour ajouter un localisateur de magasin a mes sites WordPress. J’ai donc décidé de construire mon propre store locator.
En résumé, ce plugin WordPress crée un custom post type « store » et lui attributs les champs personnalisés suivants:
- store_adresse
- store_ville
- store_province
- store_code_postal
- store_phone
- store_latitude
- store_longitude
Le modèle quant à lui affiche les post_type « store ». Si une recherche par proximité est détectée, le modèle affiche seulement les magasins se trouvant dans le rayon d’action spécifié.
Installer et activer l’extension
Après avoir téléchargé les documents, déplacés le fichier « localisateur-magasin.php » dans le répertoire « /wp-content/plugins/ ». Vous serez ensuite en mesure d’activer l’extension dans votre administration WordPress.
J’ai décidé de placer tout le code nécessaire au module dans une extension pour simplement garder mon fichier functions.php plus en ordre.
Déplacer et sélectionner le modèle
Même principe que pour l’étape précédente, déplacer le fichier template-localisateur.php dans votre thème. Créer ensuite une page et activer le modèle.
Caractéristiques de l’extension
Par défaut, le modèle affichera toutes les entrées disponibles. Si par contre une recherche est détectée, il affichera toutes les entrées disponibles dans le rayon d’action spécifier.
Longitude / Latitude
Le calcul de la longitude et de la latitude se fait dans le fichier d’extension. Les coordonnées sont géocodées à partir de l’adresse fournie et sont enregistrées dans des champs supplémentaires reliés au post.
$geocode=file_get_contents('http://maps.google.com/maps/api/geocode/json?address=' . urlencode($_POST['store_ville']) . '+' . urlencode($_POST['store_province']) . '+' . urlencode($_POST['store_code_postal']) . '&sensor=false'); $output= json_decode($geocode); $latitude = $output->results[0]->geometry->location->lat; $longitude = $output->results[0]->geometry->location->lng;
Calcul du rayon d’action
Le calcul du rayon d’action est situé dans le code SQL ci-dessous:
( 6371 * acos( cos( radians( '.$latitude.' ) ) * cos( radians( CONVERT( latitudemeta.meta_value, DECIMAL( 10, 6 ) ) ) ) * cos( radians( CONVERT( longitudemeta.meta_value, DECIMAL( 10, 6 ) ) ) - radians( '.$longitude.' ) ) + sin( radians( '.$latitude.' ) ) * sin( radians( CONVERT( latitudemeta.meta_value, DECIMAL( 10, 6 ) ) ) ) ) ) AS distance