我最近一直在使用Leaflet並將其集成到WordPress自定義文章類型中。我爲一個城市的自定義帖子類型添加了一個字段。然後將其編碼爲JavaScript併發送到Mapbox以獲取座標。座標然後被髮送到顯示標記的功能。這部分工作很好。我遇到的問題是讓標題正確循環並顯示在彈出對話框中。當我看到源代碼時,我發現名稱和城市都被正確編碼。代碼如下。謝謝!Leaflet Popup Loop
// Loops through CPT and puts both city and name into array
// TODO: Rename hometown to something more relevant
while ($loop->have_posts()) : $loop->the_post();
$post_meta = get_post_meta($post->ID, 'hometown', true);
$title = get_the_title($post->ID);
if (!empty ($post_meta) || !empty ($title)) {
$hometown[] = array(
'city' => $post_meta,
'name' => $title
);
}
endwhile;
<script>
var hometown = <?php echo wp_json_encode($hometown); ?>;
var map = L.map('map').setView([40, 0], 2);
L.mapbox.accessToken = 'myToken';
var geocoder = L.mapbox.geocoder('mapbox.places');
for (var i = 0; i < hometown.length; i++)
{
geocoder.query(hometown[i].city, showLoc);
}
L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=myToken', {
maxZoom: 18,
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
'<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
'Imagery © <a href="http://mapbox.com">Mapbox</a>',
id: 'mapbox.streets'
}).addTo(map);
function showLoc(err, data) {
L.marker([data.latlng[0], data.latlng[1]], 2)
.bindPopup(hometown[0].name)
.addTo (map);
}
</script>
當城市由兩個詞組成(如紐約)時,我遇到了問題。我修改了這一行,似乎有所幫助。 'var city = data.results.query.join('');'也在考慮使用正則表達式去除任何空格。現在我有點好奇,如果我可以製作某種計數器,如果不止一個人來自同一個城市並在彈出窗口中使用它。謝謝!這真的有幫助。 – user2875165
剛剛經過測試,我確實沒有注意到。查詢'紐約,紐約'返回陣列['新','紐約','紐約']不['紐約','紐約']如我所料。好吧,只要你知道發生了什麼事情,你就可以適應。如果我想在每個城市處理多個名字,我會做類似以下的事情:'[{names:['John','Peter'],城市:'科羅拉多州丹佛'},{名稱:['Jane','安妮'],城市:'德克薩斯州休斯頓'}]'這樣你就可以在每個城市有一個標記,並且可以輕鬆地返回屬於該城市的所有名字。 – iH8
這似乎是一個好方法!我可能需要在PHP數組中正確使用它。這只是一個有趣的項目,我正在努力展示員工來自哪裏,幸運的是它不一定是完美的。 – user2875165