Когда использовать removeEditorPanel()

Вопрос или проблема

Я хотел бы удалить панель обсуждения в боковой панели редактора сообщения с помощью removeEditorPanel().

Я пытаюсь сделать следующее:

const { removeEditorPanel } = wp.data.dispatch( 'core/edit-post' )
removeEditorPanel( 'discussion-panel' )

Однако я получаю ошибку, что removeEditorPanel не определен, потому что, я предполагаю, core/edit-post еще не загружен. Есть ли событие или хуки, которые я могу использовать, чтобы узнать, что редактор сообщения загружен?

В качестве обходного решения я использую интервал, чтобы проверить, существует ли window.wp, и querySelector(), чтобы проверить на наличие .edit-post-sidebar, но это кажется немного ненадежным.

Я думаю, это связано с тем, как вы его деструктурировали. Я полагаю, что dispatch работает как “действие” в реальном времени. Поэтому вам нужно вызывать dispatch(), когда вы хотите удалить панель.

Попробуйте это:

const { dispatch } = wp.data;
dispatch( 'core/edit-post' ).removeEditorPanel( 'discussion-panel' )

Ответ или решение

Для того чтобы удалить панель обсуждений в боковой панели редактора постов с помощью функции removeEditorPanel(), вы правы в том, что необходимо удостовериться, что редактор загружен и доступен. Ваша первоначальная попытка использовать wp.data.dispatch('core/edit-post') не совсем корректна, потому что необходимо правильно получить доступ к функции removeEditorPanel().

Для решения вашей проблемы, вы можете использовать хук wp.data.subscribe, чтобы отслеживать состояние, и убедиться, что плагин core/edit-post загружен, прежде чем вы попытаетесь удалить панель. Вот так это можно сделать:

const { subscribe } = wp.data;

const unsubscribe = subscribe(() => {
    const isEditorLoaded = wp.data.select('core/edit-post').isEditorPanelEnabled('discussion-panel');

    if (isEditorLoaded) {
        const { removeEditorPanel } = wp.data.dispatch('core/edit-post');
        removeEditorPanel('discussion-panel');

        // Отменяем подписку после выполнения
        unsubscribe();
    }
});

Этот код будет подписываться на изменения состояния редактора и вычислять, загружен ли редактор. Как только редактор будет готов, он вызовет removeEditorPanel('discussion-panel').

Важно понимать, что removeEditorPanel() необходимо вызывать после того, как dispatch() будет доступен, что и достигается с помощью подписки. Это избавляет от необходимости использовать setInterval для проверки.

Такой подход является более правильным и чистым решением вашей задачи, так как он использует события и подписки библиотеки wp.data, вместо "джанки" кода, который вы использовали ранее. Надеюсь, это поможет вам успешно реализовать ваши запросы в редакторе постов WordPress.

Оцените материал
Добавить комментарий

Капча загружается...