Вопрос или проблема
Я получаю следующую ошибку из comment-reply.min.js
(который, похоже, является файлом WordPress):
Uncaught TypeError: Cannot read property 'firstChild' of null
at comment-reply.min.js?ver=026d5828124b6319675d89d24f212b97:2
at Object.moveForm (comment-reply.min.js?ver=026d5828124b6319675d89d24f212b97:2)
at HTMLAnchorElement.a (comment-reply.min.js?ver=026d5828124b6319675d89d24f212b97:2)
Это известная проблема после обновления до WordPress 5.5 или мне стоит начать её отладку?
Как лучше всего решить эту проблему?
Мы не изменяли шаблон комментариев, а только обновились до последней версии WordPress.
Соответствующая часть шаблона:
<?php comment_id_fields($_GET["post_id"]); ?>
<?php do_action('comment_form', $_GET["post_id"]); ?>
<div class="fl-comment-form-cancel">
<?php cancel_comment_reply_link(); ?>
</div>
После быстрого исследования, похоже, файл ищет элемент с id wp-temp-form-div
, который не существует.
И проблема, похоже, заключается здесь:
, r = E(h.commentReplyTitleId)
, o = void 0 !== r ? r.firstChild.textContent : "";
Если commentReplyTitleId
не существует, r
будет null
, следовательно, отличается от undefined
, поэтому он пытается получить firstChild
.
Быстрый обходной путь, который я использую:
(function () {
var oldGet = document.getElementById.bind(document)
document.getElementById = function (id) { return oldGet(id) || undefined; }
})();
Но мне кажется, что это ошибка в 5.5.
Это было исправлено в 5.5.1, коммит 48877:
Исправлена проверка на существование элемента ответа в
comment-reply.js.
document.getElementById()
возвращаетnull
, если не найдено совпадающее значение, поэтому предыдущая проверка не сработала, как ожидалось.
Ответ или решение
Несмотря на то, что вы столкнулись с ошибкой Uncaught TypeError: Cannot read property 'firstChild' of null
после обновления до WordPress 5.5, важно отметить, что это известная проблема, которая была исправлена в версии 5.5.1.
Суть проблемы
Ошибка происходит из-за того, что скрипт comment-reply.min.js
пытается получить элемент с идентификатором wp-temp-form-div
, который отсутствует на странице. Если элемент не найден, метод document.getElementById()
возвращает null
, что и приводит к ошибке при попытке получить firstChild
этого null
значения.
Ошибка в коде
Как вы отметили в своем вопросе, в строке:
r = E(h.commentReplyTitleId),
o = void 0 !== r ? r.firstChild.textContent : "";
если r
равен null
, то выполнение r.firstChild
вызывает ошибку.
Рабочее решение
Поскольку вы указали, что вы не меняли шаблон комментариев, а только обновили WordPress, самое разумное решение — просто обновить до версии WordPress 5.5.1 или выше, где данная проблема была исправлена.
Временное решение
Если вы по каким-то причинам не можете обновить до версии 5.5.1, приведенный вами обходной путь является временным решением, но не идеальным, так как изменяет поведение метода document.getElementById()
. Это может привести к непредвиденным последствиям на других страницах, где используется этот метод.
Проверка исправлений
Убедитесь, что все плагины и тема, которые вы используете, совместимы с WordPress 5.5.1. Если у вас все еще возникают проблемы после обновления, вы можете проверить консоль разработчика на наличие других ошибок или конфликтов с плагинами.
Рекомендуемые действия
- Обновите ваш WordPress до версии 5.5.1 или выше.
- Проверьте совместимость всех плагинов и тем.
- Если обновление не решает проблему, попробуйте временно отключить все плагины и протестировать, воспроизводится ли ошибка. Если нет, включайте плагины по одному, чтобы выявить конфликтующий.
Таким образом, если вы следуете этим шагам, проблема должна быть успешно решена. Оставайтесь внимательными к обновлениям, так как WordPress активно развивается, и ошибки исправляются на регулярной основе.