СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

H Белый экран «смерти», после обновления WordPress до 4.2 в черновиках Tutorial

Два дня назад (23 апреля) WordPress выпустили 4.2 версию своей CMS, названную «Powell». Но сегодня я хочу рассказать не о новых функциях и новшествах, которыми пополнилась новая версия платформы, а о проблеме, связанной с появлением белого экрана «смерти» сразу же после обновления до версии 4.2. И, конечно же, о ее решении.

Как узнать, в чем проблема?

Если Вы, к сожалению, столкнулись с этой проблемой, собственно как и я — не стоит паниковать/писать в тех. поддержку вашего хостинга/переустанавливать CMS/делать downgrade и т.д. Виноватых здесь нет, и это Вам не поможет.
Первым делом Вы должны узнать, какая ошибка возникает при попытке доступа к сайту. Есть несколько способов это сделать, но наиболее продуктивным является изменение в файле "/wp-config.php" значения «false» на «true» в строчке:

define('WP_DEBUG', false);

После этого, при попытке доступа к сайту, Вы увидите код ошибки. С этим описанием ошибки Вы сможете обратиться к разработчику Вашей темы, а также поискать информацию на форуме WordPress. Также для доступа в админ панель WordPress Вы можете дописать к названию папки подключенной темы ".HOLD" (т.е. если папка с Вашей темой называется «theme», то нужно переименовать ее в «theme.HOLD»).

Но все не так просто. Во-первых, не все пользуются темами известных разработчиков, а, следовательно, не сразу смогут получить информацию по решению своей проблемы. На themeforest вообще произошел большой «бум» по обращению в support'ы разработчиков wp-тем с разными описаниями ошибок после обновления до 4.2. Во-вторых, многим нужно, чтобы сайт продолжал функционировать, а разработчики просят подождать и набраться терпения до появления обновленной версии темы с решением проблем и полностью совместимых с WP 4.2.

Хорошие новости

Наиболее часто встречающаяся проблема (если Вы столкнулись с белым экраном, скорее всего, у Вас именно такая проблема), это ошибка типа:

PHP Fatal error: Cannot redeclare get_avatar_url() (previously declared in /home/adminname/public_html/wp-includes/link-template.php:3414) in /home/adminname/public_html/wp-content/themes/themename/functions/functions.php on line 155
и решение этой проблемы есть.

Для функционирования сайта достаточно закомментировать функцию в файле "/functions.php" c названием «get_avatar_url». После этого сайт начнет функционировать, все будет работать, кроме аватаров и сервиса Gravatar. Лично меня такое решение не устроило и ждать обновления темы, связанное только с решением этой проблемы, я не хотел. Поэтому было решено разобраться в сути проблемы и устранить ее своими силами.

Решение проблемы

Решение, к счастью, оказалось очень простым и особого редактирования кода файлов не требует.
  • Сделайте резервную копию сайта (нужно скачать его на компьютер)
  • Выполните поиск по файлам в папке установленной темы с совпадением по «get_avatar_url».
    Результат будет выглядеть примерно следующим образом: image
  • Подключитесь через FTP-client к сайту, и в найденных php-файлах переименуйте везде, где используется «get_avatar_url()», имя функции. Например, я поменял «get_avatar_url» на «get_avatarius_url»

После этого можете подключаться к сайту, и все будет работать (как и раньше). При этом тема будет совместима с WordPress 4.2.

Заключение

Хотелось бы отметить, что в новой WP появились новые интересные функции, и не стоит бояться обновляться. Если же Вы не хотите никакой мороки, то следует подождать обновленной версии Вашей темы, установить ее, а затем уже ставить WordPress 4.2 «Powell». Всем удачной работы с сайтами!

комментарии (6)

–1
cmepthuk ,  
Разве bool function_exists (string $function_name) не решит проблему?
–1
RustaMechanic ,  
Я не являюсь PHP программистом, особых знаний о это языке я не имею. Публикация была добавлена именно в WordPress хаб, а не в PHP. Я привел код ошибки, было ясно что в новой версии WordPress в исходный код CMS была добавлена функция с таким же именем, поэтому, как мне показалось, наиболее простым, для устранения ошибки, было переименовать функцию в файлах с темой. Это мне помогло, это, думаю, поможет и другим, кто столкнулся с такой проблемой.
+1
+2 –1
nazarpc ,  
Есть несколько способов это сделать, но наиболее продуктивным является изменение в файле "/wp-config.php" значения «false» на «true» в строчке

А по-моему более продуктивным является сначала посмотреть в логи и не показывать ошибки всем подряд, это вообще первое что в таких ситуациях нуэно делать.
–1
RustaMechanic ,  
Строяка кода была написана WP-разработчиками специально для выяснения причины ошибки. Об этом они пишут и на своем форуме. Я лишь пояснил как это сделать, для того, чтобы люди могли узнать в чем ошибка.
И также не считаю, что показываю здесь ошибки всем подряд, ведь статья была написана для того, чтобы людям помочь.
P.S. Мне и моей внутренней кармы достаточно, я знаю, что многие столкнулись с проблемой, знаю что многие представления не имеют как ее решить, так что я рад был помочь. ;)
0
Pingbull ,  
уважаемые разработчики тем и плагинов, используйте префиксы
+1
Lailore ,  
Может лучше namespace?