• 解決済 nonowith

    (@nonowith)


    ACFのgooglemapを使用して、サイトに地図を表示させたく作業しております。
    APIキーも取得し、無事地図は表示できるようになったのですが、なぜかマーカーが地図外のちょうど左上に来てしまい、地図を読み込んだ時に表示されず困っております。
    ACFの公式サイトを参考に以下の様に設定しております。

    ご教示いただければ幸いです。宜しくお願い致します。

    ★functions.php

    function my_acf_google_map_api( $api ){
    	
    	$api['key'] = '{取得APIキー}';
    	
    	return $api;
    	
    }

    //js読み込み

        //googleapi
        wp_enqueue_script('googleapi','https://maps.googleapis.com/maps/api/js?key={取得したAPIキー}', array('jquery'), '', false);
    
        //googlemap      
        wp_enqueue_script(
          'googlemap',
          get_settings('template_directory').'/wp-content/themes/restaurant_fmt/js/googlemap.js',
    	  array('jquery','googleapi'), '',
          false
        ); 

    ★CSS
    //googleapp

    .acf-map {
    	width: 100%;
    	height: 400px;
    	border: #ccc solid 1px;
    	margin: 20px 0;
    }
    
    /* fixes potential theme css conflict */
    .acf-map img {
       max-width: inherit !important;
    }

    ★googlemap.js

    (function($) {
    
    /*
    *  new_map
    *
    *  This function will render a Google Map onto the selected jQuery element
    *
    *  @type	function
    *  @date	8/11/2013
    *  @since	4.3.0
    *
    *  @param	$el (jQuery element)
    *  @return	n/a
    */
    
    function new_map( $el ) {
    	
    	// var
    	var $markers = $el.find('.marker');
    	
    	
    	// vars
    	var args = {
    		zoom		: 16,
    		center		: new google.maps.LatLng(0, 0),
    		mapTypeId	: google.maps.MapTypeId.ROADMAP
    	};
    	
    	
    	// create map	        	
    	var map = new google.maps.Map( $el[0], args);
    	
    	
    	// add a markers reference
    	map.markers = [];
    	
    	
    	// add markers
    	$markers.each(function(){
    		
        	add_marker( $(this), map );
    		
    	});
    	
    	
    	// center map
    	center_map( map );
    	
    	
    	// return
    	return map;
    	
    }
    
    /*
    *  add_marker
    *
    *  This function will add a marker to the selected Google Map
    *
    *  @type	function
    *  @date	8/11/2013
    *  @since	4.3.0
    *
    *  @param	$marker (jQuery element)
    *  @param	map (Google Map object)
    *  @return	n/a
    */
    
    function add_marker( $marker, map ) {
    
    	// var
    	var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );
    
    	// create marker
    	var marker = new google.maps.Marker({
    		position	: latlng,
    		map			: map
    	});
    
    	// add to array
    	map.markers.push( marker );
    
    	// if marker contains HTML, add it to an infoWindow
    	if( $marker.html() )
    	{
    		// create info window
    		var infowindow = new google.maps.InfoWindow({
    			content		: $marker.html()
    		});
    
    		// show info window when marker is clicked
    		google.maps.event.addListener(marker, 'click', function() {
    
    			infowindow.open( map, marker );
    
    		});
    	}
     var styleOptions = [{
     'stylers': [{
     'gamma': 1.2//ガンマ
     }, {
     'saturation': -100//彩度
     }, {
     'lightness': -20//明度
     }]
     }]
    
     var styledMapOptions = {
     name: 'mono'
     }
     var monoType = new google.maps.StyledMapType(styleOptions, styledMapOptions);
     map.mapTypes.set('mono', monoType);
     map.setMapTypeId('mono');
    
    }
    
    /*
    *  center_map
    *
    *  This function will center the map, showing all markers attached to this map
    *
    *  @type	function
    *  @date	8/11/2013
    *  @since	4.3.0
    *
    *  @param	map (Google Map object)
    *  @return	n/a
    */
    
    function center_map( map ) {
    
    	// vars
    	var bounds = new google.maps.LatLngBounds();
    
    	// loop through all markers and create bounds
    	$.each( map.markers, function( i, marker ){
    
    		var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );
    
    		bounds.extend( latlng );
    
    	});
    
    	// only 1 marker?
    	if( map.markers.length == 1 )
    	{
    		// set center of map
    	    map.setCenter( bounds.getCenter() );
    	    map.setZoom( 16 );
    	}
    	else
    	{
    		// fit to bounds
    		map.fitBounds( bounds );
    	}
    
    }
    
    /*
    *  document ready
    *
    *  This function will render each map when the document is ready (page has loaded)
    *
    *  @type	function
    *  @date	8/11/2013
    *  @since	5.0.0
    *
    *  @param	n/a
    *  @return	n/a
    */
    // global var
    var map = null;
    
    $(document).ready(function(){
    
    	$('.acf-map').each(function(){
    
    		// create map
    		map = new_map( $(this) );
    
    	});
    
    });
    
    })(jQuery);

    ★index.php(地図を表示させたい)

    		<?php $loop = new WP_Query(array("post_type" => "shopinfo", "posts_per_page" => 1 ));
    			while(
    				$loop->have_posts()): 
    				$loop->the_post(); 
    			?>
    			<?php the_content();?>
    			<?php
    				$location = get_field('googleapi');
    				if( !empty($location) ): ?>
    					<div class="acf-map">
    					<div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; ?>"></div>
    					</div>
    			<?php endif; ?>
    		<?php endwhile; ?>
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック投稿者 nonowith

    (@nonowith)

    googlemap.jsの読み込みのタイミングを
    $(window).load(function()にすると、解決しました。
    大変勉強になりました。頑張って勉強したいと思います。

1件の返信を表示中 - 1 - 1件目 (全1件中)

トピック「ACF + GooglemapApi マーカーを地図の中心にするには」には新たに返信することはできません。