2014-09-04 39 views
0

我使用WP Favorite Posts插件允許用戶在網站上選擇自己喜歡的旅行。這些帖子使用cookie保存到插件提供的已保存模板中。我編輯了此模板以包含地圖並從自定義元字段中拉出座標。使用wp_query查找點時未在Google地圖上顯示的標記

完整模板可在http://pastebin.com/zDrr5fPn找到。

我已經包括以顯示地圖中的代碼是:

<div id="map" style="width: 100%; height: 250px; position: relative; overflow: hidden; -webkit-transform: translateZ(0px); background-color: rgb(229, 227, 223);"></div> 

,我使用的循環中的代碼是:

while ($loop->have_posts()) : $loop->the_post(); 
       if (get_post_meta($post->ID, 'custom_latlng', true) !== '') : ?> 
        <div style="display:block;"> 
         <script type="text/javascript"> 
          function initialize() { 
          //load map 
          map = new google.maps.Map(document.getElementById('map'), { 
            zoom: 9, 
            center: new google.maps.LatLng(53.3498, -6.2603), 
            mapTypeId: google.maps.MapTypeId.ROADMAP, 
            disableDefaultUI: true 
          }); 


          var savedMarkers = new Array(); 



          <?php $saved_pos = get_post_meta($post->ID, 'custom_latlng', true);?> 

           function addMarker() { 
            var savedMarker = new google.maps.Marker({ 
             map: map, 
             position: new google.maps.LatLng(<?php echo $saved_pos ?>), 
             icon: '/wp-content/themes/dublin-visitors-centre/images/saved_icon.png', 
            }); 
           savedMarkers.push(savedMarker); 

           } 
           } 
         </script> 
        </div> 

此刻,當我查看源,我可以看到所選的點,座標確實出現。但是,它們不會出現在地圖上。就好像這些點出現在已保存的帖子列表中,但完全不在地圖上。

我希望這是有道理的。

乾杯

+0

你可以在DOM中顯示JS輸出嗎? – MrUpsidown 2014-09-04 13:32:29

+0

嗯,只是一個快速更新,我刪除了'功能addMarker()',並得到最後一個標記顯示。如果你去http://dublinvisitorcentre.ie/things/belvedere-irish-night/,保存到RHS的收藏夾,那麼http://dublinvisitorcentre.ie/things/jeanie-johnston-tall-ship-famine-museum /並保存到收藏夾,最後到http:// dublinvisitorcentre。即/保存,你會看到只有一個項目進來,這應該是你最後保存的項目。 – damienoneill2001 2014-09-04 13:58:15

+0

請將您的PHP腳本輸出的JS粘貼到您的問題中。 – MrUpsidown 2014-09-04 14:03:05

回答

1

在循環中,僅填充緯度/經度數組,創建initialize循環外:

<div id="map" style="width: 100%; height: 250px;"></div> 

<script type="text/javascript"> 
    function initialize() { 
    //load map 
    map = new google.maps.Map(document.getElementById('map'), { 
           zoom: 9, 
           center: new google.maps.LatLng(53.3498, -6.2603), 
           mapTypeId: google.maps.MapTypeId.ROADMAP, 
           disableDefaultUI: true 
     }); 
    //create the markers 
    for(var i=0;i<savedMarkers.length;++i){ 
     savedMarkers[i] = new google.maps.Marker({ 
      map: map, 
      position: new google.maps.LatLng(savedMarkers[i][0], 
               savedMarkers[i][1]), 
      icon: '/wp-content/themes/dublin-visitors-centre/images/saved_icon.png', 
      }); 
    } 
    } 

<?php 
    //create a php-array to store the latitudes and longitudes 
    $savedMarkers=array(); 
    //use the loop to populate the array 
    while ($loop->have_posts()) : $loop->the_post(); 
     if (get_post_meta($post->ID, 'custom_latlng', true) !== '') : 
     $savedMarkers[]=explode(',',get_post_meta($post->ID, 'custom_latlng', true)); 
     endif; 
    endwhile; 
?> 
//print the array as js-variable 
savedMarkers= <?php echo json_encode($savedMarkers);?>; 

</script> 

它沒有測試過,可能會有一些錯誤,但它應該是足以演示工作流程。


相關的評論: 要應用標題後的信息窗口,內容也存儲在savedMarkers項標題:

$savedMarkers[]=array_merge(explode(',',get_post_meta($post->ID, 'custom_latlng', true)), 
          array(get_the_title())); 

當您創建標記創建自定義物業爲您存儲infowindow內容的標記(我們稱之爲屬性content):

//create the markers 
for(var i=0;i<savedMarkers.length;++i){ 
    savedMarkers[i] = new google.maps.Marker({ 
     map: map, 
     position: new google.maps.LatLng(savedMarkers[i][0], 
              savedMarkers[i][1]), 
     icon: '/wp-content/themes/dublin-visitors-centre/images/saved_icon.png', 
      //the content(post-title) 
     content: savedMarkers[i][2] 
     }); 
} 

現在使用此內容的信息窗口內容:

google.maps.event.addListener(savedMarkers[i], 'click', function() { 
    infowindow.setContent(this.get('content')); 
    infowindow.open(this.getMap(), this); 
    } 
); 

您也可以創建信息窗口中的鏈接帖子:

$savedMarkers[]=array_merge(explode(',',get_post_meta($post->ID, 'custom_latlng', true)), 
          array(get_the_title(),get_permalink())); 

......

//create the markers 
for(var i=0;i<savedMarkers.length;++i){ 
    savedMarkers[i] = new google.maps.Marker({ 
     map: map, 
     position: new google.maps.LatLng(savedMarkers[i][0], 
              savedMarkers[i][1]), 
     icon: '/wp-content/themes/dublin-visitors-centre/images/saved_icon.png', 
     //the content(post-title) 
     title: '' + savedMarkers[i][2], 
     //post-URL 
     href: savedMarkers[i][3] 
     }); 
} 

..........

google.maps.event.addListener(savedMarkers[i], 'click', function() { 
    var link=document.createElement('a'); 
    link.appendChild(document.createTextNode(this.get('title'))); 
    link.setAttribute('href',this.get('href')); 
    infowindow.setContent(link); 
    infowindow.open(this.getMap(), this); 
    } 
); 
+0

這似乎已經爲我做了!現在我需要做的是添加信息框,但我應該確定。非常感謝您的幫助! – damienoneill2001 2014-09-04 16:25:24

+0

這是有道理的。 – MrUpsidown 2014-09-05 07:21:48

+0

嘿@ Dr.Molle,我不知道你能否再次快速瀏覽一下,看看我缺少的信息框?我打算在目前將標記的標題添加爲信息框。我沒有js錯誤。我複製了你所做的,但是爲一個名爲savedTitles的新變量,但信息框未加載。完整的代碼可以在這裏找到:http://pastebin.com/zDrr5fPn 目前,我只是試圖在信息框中打印任何內容,並將在信息框工作後轉移到標題上。 – damienoneill2001 2014-09-05 12:40:36

相關問題