it-roy-ru.com

Триггер Javascript на Гутенберге (редактор блоков) Сохранить

Таким образом, у меня есть метабокс, который я хочу активировать при включении записи в Javascript (чтобы обновить страницу в этом случае).

В Classic Editor это можно сделать с помощью простого перенаправления, подключенного к save_post (с высоким приоритетом)

Но поскольку Гутенберг теперь преобразует процесс сохранения существующих метабоксов в отдельные вызовы AJAX, он должен быть javascript, поэтому как мне это сделать:

  • Прислушаться к событию, когда все процессы сохранения завершены, а затем вызвать JavaScript? Если так, то как называется это событие? Есть ли где-нибудь еще ссылка на эти события? ИЛИ ЖЕ

  • Запустить javascript внутри процесса сохранения метабокса AJAX, который затем может проверить состояние процесса сохранения родительской страницы перед продолжением?

7
majick

Ладно, так гораздо более хакерское решение, чем я хотел, но оно заработало ...

Вот несколько упрощенный и абстрагированный способ сделать это из моего кода, на случай, если кому-то понадобится сделать то же самое (как я уверен, в ближайшем будущем будет больше плагинов).

    var reload_check = false; var publish_button_click = false;
    jQuery(document).ready(function($) {
        add_publish_button_click = setInterval(function() {
            $publish_button = jQuery('.edit-post-header__settings .editor-post-publish-button');
            if ($publish_button && !publish_button_click) {
                publish_button_click = true;
                $publish_button.on('click', function() {
                    var reloader = setInterval(function() {
                        if (reload_check) {return;} else {reload_check = true;}
                        postsaving = wp.data.select('core/editor').isSavingPost();
                        autosaving = wp.data.select('core/editor').isAutosavingPost();
                        success = wp.data.select('core/editor').didPostSaveRequestSucceed();
                        console.log('Saving: '+postsaving+' - Autosaving: '+autosaving+' - Success: '+success);
                        if (postsaving || autosaving || !success) {classic_reload_check = false; return;}
                        clearInterval(reloader);

                        value = document.getElementById('metabox_input_id').value;
                        if (value == 'trigger_value') {
                            if (confirm('Page reload required. Refresh the page now?')) {
                                window.location.href = window.location.href+'&refreshed=1';
                            }
                        }
                    }, 1000);
                });
            }
        }, 500);
    });

... просто нужно изменить metabox_input_id и trigger_value, чтобы они соответствовали по мере необходимости. :-)

2
majick

Не уверен, что есть лучший способ, но я слушаю subscribe, а не добавляю прослушиватель событий на кнопку:

wp.data.subscribe(function () {
  var isSavingPost = wp.data.select('core/editor').isSavingPost();
  var isAutosavingPost = wp.data.select('core/editor').isAutosavingPost();

  if (isSavingPost && !isAutosavingPost) {
    // Here goes your AJAX code ......

  }
})

Официальные документы с данными Редактора сообщений: https://wordpress.org/gutenberg/handbook/designers-developers/developers/data/data-core-editor/

4
tomyam