Intereting Posts
Ошибка при отправке пакета QUERY Панель управления администратора с пользовательской вкладкой для клиента Есть ли необходимость в nonce с Post Metabox? Объявление экземпляра класса, включенного в родительскую тему из дочерней темы functions.php Детская тема functions.php Я использую теги open и close php? WP_List_Table внутри метабокса не работает на submit Как получить несколько значений из многомерного массива в wp_options? Плагин не работает локально, но работает на сервере the_author_meta ('user_url', $ author-> ID) работает неправильно. как я могу это решить? Постоянные ссылки с term.html и category / term.html без плагина? Автоматически добавлять тег в соответствии с пользовательскими метаданными получить значения из контактной формы 7 плагин wp Показывать сообщение на панели управления wordpress admin Как я могу условно изменить заголовок метанома таксономии? Как WooCommerce хранит продукты / изменения продукта? / Бесплатный скрипт для импорта вариаций продукта?

Геокодирование раздельного настраиваемого массива полей

Итак, у меня небольшая проблема с перекрестными сигналами в WordPress между API Google Maps и вложенным пользовательским полем. Я хочу, чтобы геокодировать адрес, который был взорван из настраиваемого поля, отформатирован «имя, адрес»:

<?php $trucks = get_post_meta($post->ID, "truck", false); if ($trucks[0]=="") { ?> <p>No Trucks Operating Today</p> <?php } else { ?> <?php foreach($trucks as $truck) { $truckdata = explode(',', $truck ); $name = $truckdata[0]; $location = $truckdata[1]; echo $name . ' is located at' . $location .'<br />'; ?> <?php } ?> 

Этот код позволит мне вызвать каждое настраиваемое поле, взорвать значение в его имя и местоположение в отдельное значение и повторить их ниже.

То, что я хочу сделать дальше, отображает каждое значение в карте Google. Вот код, с которым я работаю:

  <script src="http://maps.google.com/maps/api/js?sensor=false" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { initialize(); }); function initialize() { var map_options = { center: new google.maps.LatLng(33.84659,-84.35686), zoom: 14, mapTypeId: google.maps.MapTypeId.ROADMAP }; var google_map = new google.maps.Map(document.getElementById("map_canvas"), map_options); var info_window = new google.maps.InfoWindow({ content: 'loading' }); var t = []; var x = []; var y = []; var h = []; t.push('Location Name 1'); x.push(33.84659); y.push(-84.35686); h.push('<p><strong>Location Name 1</strong><br/>Address 1</p>'); t.push('Location Name 2'); x.push(33.846253); y.push(-84.362125); h.push('<p><strong>Location Name 2</strong><br/>Address 2</p>'); var i = 0; for ( item in t ) { var m = new google.maps.Marker({ map: google_map, animation: google.maps.Animation.DROP, title: t[i], position: new google.maps.LatLng(x[i],y[i]), html: h[i] }); google.maps.event.addListener(m, 'click', function() { info_window.setContent(this.html); info_window.open(google_map, this); }); i++; } } </script> <div id="map_canvas" style="width:400px;height:400px;">Google Map</div> 

Это пример, но рассматриваемый код представляет собой переменные t, x, y и h. Я знаю, что должен уметь хватать адрес, вставлять его в геокодер и выводить местоположение для маркера. Мой вопрос:

1) как мне пройти через мои пользовательские поля, чтобы захватить адреса внутри javascript? Есть ли способ захватить массив с WP_Query (поскольку он только захватывает один пост) и использовать эти переменные в файле javascript?

2) как геокодировать адреса и вводить их в позиции lat и lon, чтобы захватить правильные координаты для маркеров

3) как только у меня будут геокодированные адреса, как я могу поместить маркеры карт, которые отражают настроение ниже?

Solutions Collecting From Web of "Геокодирование раздельного настраиваемого массива полей"

Это не полный ответ, но несколько советов –

Не геокодируйте адреса на интерфейсных запросах, это пустая трата циклов. Адрес нужно только геокодировать, и вы можете хранить данные lat / lon с помощью метаданных. Используйте save_post для выполнения геокодирования, когда сообщение сохраняется в save_post .

Вы можете геокодировать адреса с помощью php следующим образом:

 $request_url = "http://maps.google.com/maps/geo?output=xml&q=" . urlencode($address); $xml = simplexml_load_file( $request_url ); $status = $xml->Response->Status->code; if( strcmp($status, "200" ) == 0 ): $coordinates = split( ',', $xml->Response->Placemark->Point->coordinates ); $lat = $coordinates[1]; $lon = $coordinates[0]; endif; 

Это просто быстрый пример, вы захотите добавить некоторую обработку ошибок там для сбоев геокода. Дополнительную информацию см. В документах Google Maps API.

Чтобы получить данные о местоположении в javascript, используйте wp_localize_script . Вы можете добавить фильтр в the_posts , который предоставит вам массив ваших сообщений и позволит вам захватить мета-почту для каждого, чтобы локализовать данные для вашего скрипта. Затем, когда ваш скрипт загрузится, вы получите доступ к этому массиву для повторения и размещения ваших маркеров.