Вопрос или проблема
Я хотел бы удалить панель обсуждения в боковой панели редактора сообщения с помощью 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.