WordPress 5 в редакторе блоков выполняет шорткоды. Проверьте свои шорткоды


Неприятной неожиданностью вывалилось обновление вордпресс 5-й версии.
Все было хорошо, пока я не зашел на редактирование страницы на которой был вписан шорткод.
Я получил фатальную ошибку (фаталити - моя версия):

Fatal error: Uncaught error: Call to undefined function rcl_user_action()

Подробности:

А шорткод то сработал!
А шорткод то сработал!

"Какого черта творится" подумал я - ведь зайдя на страницу с прошлой записью, где не было шорткода, проблемы там не было.
Ошибка в логах подсказала мне - что функция не определена. И я вижу шорткод, единственный шорткод, что выводит список пользователей (больше в этой записи ничего нет).

Значит дело в нём.
Но ВП же не долбанулись совсем - не могут же они шорткод начать рендерить? Подумал я и оказался прав - шорткод в гутенберг редакторе рендерится и отрабатывает почти весь! Дело было к полуночи - я быстренько составил баг-репорт Андрею, разработчику WP-Recall, в оффлайн скайп. Будет с утра над чем подумать:

Репорт разработчику WP-Recall отправлен
Репорт разработчику WP-Recall отправлен

В WordPress 4.9 шорткод даже не пытался завестись в админке - это просто был текст для редактора. В новом редакторе все шорткоды (но не полностью) отрабатывают - но не визуализируются. И такое происходит только после обновления записи в редакторе. Если вы только начали писать запись и вставили шорткод - всё спокойно. Но стоит вам сохранить запись и обновить её - вы можете получить неприятность.

Я решил проверить остальные шорткоды плагина и еще интересней баг, который поломал визуальное представление на странице редактирования с этим шорткодом:

Dashicons отключены
Dashicons отключены

- и это не режим дебага. Это пропали иконки Dashicons в редактировании записи. Но реколл шорткод их там вообще не вызывает нигде. Тут я встал в ступор и только Андрей дал мне внятный ответ с утра: это пытается отработать визуальный редактор ВП (шорткод выводит форму публикации в фронтенде). Гутенберг (редактор блоков), его отрабатывает в бекенде. И каким-то образом дерегистрирует dashicons. В этом месте тоже нужна проверка и блокирование срабатывания в блочном редакторе.

Как повторить самостоятельно?

Вот вам пример:

function otfm_simple_shortcode(){
    if( is_admin() ) {
        wp_die('work!');
    }
    return 'hello world';
}
add_shortcode('otfm_smpl', 'otfm_simple_shortcode');

Впишите этот сниппет в файл функций вашей активной темы (так вы зарегистрируете шорткод otfm_smpl) и вставьте шорткод в редактор блоков. Сохраните запись и обновите.
Увидите результат:

Сработал
Сработал 🙁

А теперь попробуйте провернуть это в ВП ниже 5.0. Например на 4.9, где нет блочного редактора - это будет просто текст для старого редактора, а не полноценный шорткод.

Варианты выхода из ситуации:

Если вы пользователь - то просто написать о проблеме разработчику.

Если вы разработчик - то вариантов несколько:

Проверка через is_admin() и запрет на работу через эту функцию будет фатально для шорткодов что используют ajax. Т.е. это полумера и не всем подойдет.

Второй вариант - проверять что мы сейчас в редакторе блоков находимся. Вот на гитхабе функция проверки что мы в редакторе блоков - ссылка

Теперь вам нужно ее использовать в своем проекте и проверять в самом начале инициализации шорткода - что вы не в редакторе блоков находитесь.

Если вы пишете дополнение для WP-Recall - то проверяйте так в начале шорткода:

if( rcl_is_gutenberg() ) return false;

- доступно с версии 16.17.1


Андрей быстро разобрался с проблемой и оперативно выпустил обновление WP-Recall - и похоже что не один пользователь не успел наступить на эти грабли, которые подсунул ВП 5.0 в этот плагин.

И вы проверьте свои шорткоды - зайдя на страницу редактирования записи где они вписаны. Баг конечно не затрагивает фронтенд часть сайта, но неприятно когда в админке вы заходите в запись и...


Зачем ВП начали обрабатывать шорткоды в редакторе? Наверно им это нужно для работы. Может быть вставленные шорткоды в блок шорткода будут полноценными визуальными блоками отображаться? Значит это функционал "на вырост"?
В общем - нам теперь с этим жить.

Сталкивались с подобным?
Помогла вам эта информация?
Если у вас другие варианты решения этой проблемы - поделитесь через комментарии

#WordPress #Gutenberg #BlockEditor

Комментариев нет

Оставьте комментарий

Авторизация
*
*
Регистрация
*
*
*
Настоящим подтверждаю, что я ознакомлен и согласен с условиями политики конфиденциальности
Генерация пароля
Написать
*
*