Здравствуйте!
Нечто похожее нам приходилось реализовать для одного клиента.
Единственное отличие - метка добавляется не из катомных записей, а на конкретной странице, на которой при помощи ACF Repeater созданы кастомные поля.
Краткая инструкция:
1) Создайте поле ACF Repeater + 2 кастомных поля Широта и Долгота и выведите на странице
2) При помощи яндекс карт (
https://yandex.ru/maps/) клиент находит координаты объекта и прописывает его через repeater в кастомные поля Широта и Долгота.
3) Создайте шаблон (скопируйте page.php) и назначьте его для созданной вами страницы.
Пример подобного шаблона:
В данном коде присутствует лишний код. Но думаю, что вы найдете необходимые участки...
Пример шаблона<div class="container content-page">
		<div class="page-content">
			<div class="row">
				<div class="content col-md-12">
					<div id="customMap" class="YMaps" style="width:100%;height:400px;">
					</div>
					<?php if( have_rows('example_mebel') ): ?>
						<?php $yamap = [];?>
						<?php while( have_rows('example_mebel') ): the_row(); ?>
							<!-- baloon content -->
							<?php $example_title = get_sub_field('example_title') ?>
							<?php $example_address = get_sub_field('example_address') ?>
							<?php $example_phone = get_sub_field('example_phone') ?>
							<?php $example_time = get_sub_field('example_time') ?>
							<?php 
	$example_placemark_type = array
	("twirl#darkgreenStretchyIcon","twirl#greenStretchyIcon"); 
								// $example_placemark_type = array("twirl#redIcon", "twirl#darkblueIcon", "twirl#pinkIcon", "twirl#darkorangeIcon", "twirl#violetIcon"); 
							?>
							<!-- baloon content -->
							<?php $tempID = get_sub_field( 'example_id'); ?>
							<?php $cityName = get_sub_field( 'example_city'); ?>
							<?php if( have_rows('example_places') ): while( have_rows('example_places') ): the_row();  ?>
								<?php $example_longitude = get_sub_field( 'example_longitude'); ?>
								<?php $example_lattitude = get_sub_field( 'example_lattitude'); ?>
								
							
							<!---->
							<?php
								array_push
								(
									$yamap,
									[
										"lat" => $example_lattitude,
										"lon" => $example_longitude,
										"header" => $example_title,
										"address" => $example_address,
										"time" => $example_time,
										"footer" => $example_phone,
										"placemark" => $example_placemark_type[array_rand($example_placemark_type)],
										"id" => $tempID,
										"city" => $cityName
									]
								);
							?>
								<?php endwhile; endif; ?>
						<?php endwhile; ?>
					<?php endif; ?>
				</div>
				<div style="padding: 10px 0 !important; clear: both;"></div>
				<div class="content col-md-12">
					<?php if( have_rows('example_mebel') ): ?>
						<div class="example_accordion">
							<div class="panel-group" id="accordion">
						<?php while( have_rows('example_mebel') ): the_row(); ?>
							
							<!--example_places-->
								<!-- begin object -->
								
										<!-- ** -->
										<?php if ($example_title = get_sub_field('example_title')) { ?>
											<?php ($example_id = get_sub_field('example_id')); ?>
										
										 
											<div class="panel panel-default">
											  <div class="panel-heading">
												<h4 class="panel-title">
												  <a data-toggle="collapse" data-parent="#accordion" href="#<?php echo $example_id ?>"><?php echo $example_title ?><?php if ($example_city = get_sub_field('example_city')) { ?><span style="float:right;"><?php echo $example_city  ?></span><?php } ?></a>
												</h4>
											  </div>
											  <div id="<?php echo $example_id ?>" class="panel-collapse collapse">
												<div class="panel-body">
													<?php if ($example_address = get_sub_field('example_address')) { ?>
														<div class="faq_answer"><span class="fa fa-map-marker"><?php echo $example_address ?></span></div>
													<?php } ?>
													<?php if ($example_time = get_sub_field('example_time')) { ?>
														<div class="faq_answer"><span class="fa fa-clock-o"><?php echo $example_time ?></span></div>
													<?php } ?>
													<?php if ($example_phone = get_sub_field('example_phone')) { ?>
														<div class="faq_answer"><span class="fa fa-phone"><?php echo $example_phone ?></span></div>
													<?php } ?>
													<?php if ($example_mail = get_sub_field('example_mail')) { ?>
														<div class="faq_answer"><span class="fa fa-at"><?php echo $example_mail ?></span></div>
													<?php } ?>
													<div class="gallery">
														<?php $images = get_sub_field('example_gallery');
															if( $images ): ?>
																<ul>
																	<?php foreach( $images as $image ): ?>
																		<li>
																			<a href="<?php echo $image['url']; ?>">
																				 <img src="<?php echo $image['sizes']['thumbnail']; ?>" alt="<?php echo $image['alt']; ?>" />
																			</a>
																		</li>
																	<?php endforeach; ?>
																</ul>
														<?php endif; ?>
													</div>
												</div>
												<div class="panel-footer">
													
												</div>
											  </div>
											</div>
										  
										<?php } ?>
								
								<!-- end object -->
						<?php endwhile; ?>
							</div>
						</div>
					<?php endif; ?>
				</div>
			</div><!-- end row-fluid -->
		</div>
	</div><!-- end container -->
<?php echo "<script type=\"text/javascript\"> var points=".json_encode($yamap, true)."</script>" ?>;
 
4) Далее подключите 2 скрипта для данной страницы:
function register_scripts_map() {
		wp_register_script('custom', get_stylesheet_directory_uri() .
			'/js/custom.js');
		wp_enqueue_script('custom');	
		wp_register_script("yMapJS", "https://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU");
		wp_enqueue_script("yMapJS");
}
add_action('wp_enqueue_scripts', 'register_scripts_map');
5) Содержимое скрипта custom.js
custom скриптvar zoom = 16,
    // mapCenter = [55.709992,37.654287];
    // mapCenter = [points[0].lat, points[0].lon],
    referenceCity = ['Москва', 'Санкт-Петербург'],
    mapAlwaysReady = false;    
var customMap,
    mapCenter;
function showCurrentPlace(event)
{
    event.preventDefault();
    var currentSelectedItem = jQuery(this).find('a').attr('href').substr(1),
    currentSelectedPoint = 
        points.filter(function(item){return item.id == currentSelectedItem;})[0];
    if(mapAlwaysReady)
    {        
        customMap.setCenter([currentSelectedPoint.lat, currentSelectedPoint.lon]);
        customMap.setZoom(zoom);
    }    
    console.table(currentSelectedPoint);
}
function getMinMax(sourceArray, field)
{
    var maxPrice = Math.max.apply(Math, sourceArray.map(function(item){return item[field];})),
        minPrice = Math.min.apply(Math, sourceArray.map(function(item){return item[field];})) 
    return {max: maxPrice, min: minPrice};
}
function mapReady()
{   
    customMap = new ymaps.Map('customMap', 
    {
        center: mapCenter,
        zoom: zoom
    });
    points.forEach(function(item)
    {
        customMap.geoObjects.add
        (
            new ymaps.Placemark
            (
                [item.lat, item.lon], 
                {
                    iconContent: item.header, 
                    balloonContentHeader: item.header, 
                    balloonContentBody: 
                        item.address + 
                        '<br>' +
                        item.time
                        , 
                    balloonContentFooter: item.footer
                },
                {
                    preset: item.placemark //"twirl#pinkStretchyIcon"
                }
            )
        );    
    });
    mapAlwaysReady = true;    
    var tempBounds = points.reduce
    (
        function(prev, cur)
        {       
            // return referenceCity.filter(function(itemCity)
            // {
            //     return itemCity == cur.city;
            // }).length > 0 ? prev.concat({lat: cur.lat, lon: cur.lon}) : prev; 
            return prev.concat({lat: cur.lat, lon: cur.lon});
        }, 
        []
    ),
    referenceBounds = 
    {
        lats: getMinMax(tempBounds, 'lat'),
        longs: getMinMax(tempBounds, 'lon'),
    };
    customMap.setBounds
    (
        [
            [referenceBounds.lats.min, referenceBounds.longs.min], 
            [referenceBounds.lats.max, referenceBounds.longs.max]
        ]
    );
}
 
Конечный результат - 
https://massimomebel.com/gde-kupit
Конечно же вам придется переделать скрипт, чтобы собирать метки из кастомных записей, а не со страницы. Но в целом идея похожа.
Если вас устроит идея добавления маркеров на основе Google Maps, то тут подробная инструкция об интеграции с CPT 
https://wpbeaches.com/create-multiple-marker-map-f...