WordPress
Indiquer coordonnées Lat et Long dans deux champs personnalisés “lat” et “lng”
Ex : lat = 43.785687 et long = 48,456778
Inclure les champs personnalisés dans REST. Dans fonctions.php :
function slug_get_post_meta_cb( $object, $field_name, $request ) { return get_post_meta( $object[ 'id' ], $field_name ); } add_action( 'rest_api_init', function() { register_api_field( 'post', 'lat', array( 'get_callback' => 'slug_get_post_meta_cb', 'update_callback' => 'slug_update_post_meta_cb', 'schema' => null, ) ); register_api_field( 'post', 'lng', array( 'get_callback' => 'slug_get_post_meta_cb', 'update_callback' => 'slug_update_post_meta_cb', 'schema' => null, ) ); });
Si les coordonnées sont dans un champ unique “lat_long” (lat_long=”43.785687,48,456778″) séparer en deux champs lorsque le post est enregistré. Dans fonctions.php :
function acf_save_lat_lng( $post_id ) { $value = get_post_meta( get_the_ID(), 'lat_long', true ); list($lat, $lng) = explode(',', $value); update_post_meta( $post_id, 'lat', $lat ); update_post_meta( $post_id, 'lng', $lng ); } add_action('save_post', 'acf_save_lat_lng', 20);
Application
Dans index.html :
<script src="https://maps.google.com/maps/api/js"></script>
Dans controller.js :
.controller('MapsCtrl', function($scope, $ionicLoading, PostService, $http) { var infoWindow = new google.maps.InfoWindow(); $http({ method: 'GET', dataType: 'jsonp', url: 'ADRESSE_DU_SITE/wp-json/wp/v2/posts', headers: { 'Content-Type': 'application/json' } }) .success(function(data) { $scope.data = data; var json = $scope.data; var map = new google.maps.Map(document.getElementById("map"), { center: new google.maps.LatLng(48.826048, 2.267668), zoom: 12, mapTypeId: google.maps.MapTypeId.ROADMAP }); for (var i = 0, length = json.length; i < length; i++) { var data = json[i], latLng = new google.maps.LatLng(data.lat[0], data.lng[0]); var marker = new google.maps.Marker({ position: latLng, map: map, title: data.title.rendered }); (function(marker, data) { google.maps.event.addListener(marker, "click", function(e) { infoWindow.setContent('<a href="#/app/post/' + data.id + '">' + data.title.rendered + '</a>' + data.content.rendered); infoWindow.open(map, marker); }); })(marker, data); } }) .error(function(data) { console.log('erreur'); }); })
Dans maps.html :
<ion-view class="maps-view"> <ion-nav-title> <span>Carte</span> </ion-nav-title> <ion-content scroll="false"> <div id="map"></div> </ion-content> </ion-view>
Dans apps.js :
.state('app.maps', { url: "/maps", views: { 'menuContent': { templateUrl: "views/maps.html", controller: 'MapsCtrl' } } })