Обновить Яндекс.Карту после обновления json файла

Я сгенерировал точки и передаю их в json

$return_array = array();
$list_gas = array();

foreach(array_reverse($search_query->posts) as $post){
    $fields = CFS()->get(false, $post->ID);
    $geometry = array(
        'type' => "Point",
        'coordinates' => array($fields["lat"], $fields["lng"]),
    );
    $properties = array(
        'balloonContentHeader' => 'Заголовок', 
        'balloonContentBody' => 'Текст', 
        'balloonContentFooter' => 'Подвал', 
        'clusterCaption' => $post->post_title, 
        'hintContent' => $post->post_title,
    );
    $p_ob = array(
        'type' => "Feature",
        'id' => $post->ID,
        'geometry' => $geometry,
        'properties' => $properties,
    );
    array_push($return_array, $p_ob);
    $arr_gas = array(
        'img' => $fields["image"],
        'title' => $post->post_title,
    );
    array_push($list_gas, $arr_gas);
};

$j_arr = array(
    'type' => 'FeatureCollection',
    'features' => $return_array,
);

file_put_contents($_SERVER['DOCUMENT_ROOT'].'/place-objects.json', json_encode($j_arr, JSON_UNESCAPED_UNICODE));

После этого я создаю карту в js

ymaps.ready(init);
function init(){
    var myMap = new ymaps.Map('ya_map', {center: [54.480962, 23.071734], zoom: 10}, {searchControlProvider: 'yandex#search'}),
    objectManager = new ymaps.ObjectManager({clusterize: true, gridSize: 32, clusterDisableClickZoom: true});
    objectManager.objects.options.set('preset', 'islands#greenDotIcon');
    objectManager.clusters.options.set('preset', 'islands#greenClusterIcons');
    myMap.geoObjects.add(objectManager);
    $.ajax({
        url: "/place-objects.json"
    }).done(function(data) {
        objectManager.add(data);
    });
};

AJAX-запрос

let form = new FormData();
form.append("action", "send_email_request");
$.ajax({
    method: "POST",
    url: "/admin-ajax.php",
    dataType: 'json',
    cache: false,
    data: {
        action: "send_email_request", choices
    },
    success: function(data) {
        console.log(data)
    },
    error: function(data) {
        console.log(data)
    }
});

В functions.php

add_action('wp_enqueue_scripts', function(){
    wp_localize_script('elementor-common-js', 'wp_variables', array(
        'ajax' => admin_url('admin-ajax.php'),
    ));
});
function send_email_request(){

    // такая же генерация как выше

    wp_die();
}
add_action('wp_ajax_send_email_request', 'send_email_request');
add_action('wp_ajax_nopriv_send_email_request', 'send_email_request');

Карта создаётся, все точки появляются. Далее, я с помощью AJAX запроса отправляю данные в functions.php и перезаписываю данные в файле JSON (как мне объяснили, в WP AJAX-запросы должны отправляться и обрабатываться через functions.php). Файл меняется, но карта не обновляться. Подскажите, пожалуйста, как дальше обновить карту без перезагрузки страницы? Возможно ли запустить скрипт построения карты в functions.php?

Я выяснил, что можно удалять метки с карты и загружать JSON заново и вызывать всё это после success в AJAX-запросе на изменение JSON-файла, но я опять же не понимаю как это сделать. Для полного удаления геообъектов из кластеризатора используется clusterer.removeAll(), но я не понимаю как его применить.


Ответы (1 шт):

Автор решения: Evgeny

Если ещё актуально: у вас очевидная ошибка в использовании clusterer.removeAll() вместо objectManager.removeAll()

Как применять метод, написано в документации по ссылке. Затем можно заново загрузить объекты из вашего JSON в менеджер с помощью objectManager.add()

Код можно запустить прямо из functions, но лучше создать обработчик.

→ Ссылка