Démarrer votre site WordPress en quelques minutes

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

Dernière mise à jour le 27 septembre 2020 Publié le 7 juin 2014
wordpress-store-locator

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.

Consulter la documentations.

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