0

一連の住所をループして、別の住所から一定の距離内にあるもののリストを出力する方法を作成しようとしています。したがって、WordPress にはカスタム投稿タイプがあり、ループして次のようなアドレスの配列を作成しています。

<?php
$args = array( 'post_type' => 'friday_location', 'posts_per_page' => '-1' );
$arr = array();
$i=0;
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();

$meta = get_post_meta( $post->ID);

$string = $meta['_cmb_address'][0] . '+' . $meta['_cmb_city'][0] . '+' .$meta['_cmb_state'][0] . '+' .$meta['_cmb_zip'][0];
$string = str_replace(' ', '+', $string);

$arr[$i] = $string;
$i++;

endwhile; 
wp_reset_postdata();
?>

この後、スクリプトタグ内でこのように配列を変換しています

var locations = <?php echo json_encode($arr ); ?>;

今、私はアドレスの JS 配列を持っていると思います。この配列を Google Maps API の距離マトリックスhttps://developers.google.com/maps/documentation/javascript/distancematrix#distance_matrix_requestsに渡したいと思っています。

関連するコードは次のようになります。

function calculateDistances() {
    var opts = {
    center: new google.maps.LatLng(38.6,-98),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    map = new google.maps.Map(document.getElementById('map'), opts);
    geocoder = new google.maps.Geocoder();

    var service = new google.maps.DistanceMatrixService();
    service.getDistanceMatrix(
    {
    origins: [origin2],
    destinations: locations,
    travelMode: google.maps.TravelMode.DRIVING,
    unitSystem: google.maps.UnitSystem.IMPERIAL,
    avoidHighways: false,
    avoidTolls: false
    }, callback);
}

宛先が配列を取ることができることはわかっているので、動的に作成された配列を指定しようとしていますが、頭の中で見ているように機能しない理由はわかりません:)

4

1 に答える 1

0

これ:

var locations = <?php echo json_encode($arr ); ?>;

おそらく次のようになります。

var locations = '<?php echo json_encode($arr ); ?>';

しかし、それは単なる文字列です。配列を取得するには、次のようにします。

var locations = '<?php echo json_encode($arr ); ?>',
         JSON = JSON.parse(locations),
    loc_array = [];

for(var key in JSON) {
    if(JSON.hasOwnProperty(key)) {
        loc_array.push(JSON[key]);
    }
}

その配列を Google 関数に渡します。

service.getDistanceMatrix( 
{
   origins: loc_array,
......
于 2012-12-07T05:42:13.033 に答える