Если после правок в functions.php сайт WordPress перестал открываться, чаще всего проблема не в «сломавшемся WordPress», а в одной строке PHP-кода: лишняя скобка, пропущенная точка с запятой, неверное имя функции, конфликт с уже существующей функцией или вызов кода, который не поддерживается вашей версией PHP. В такой ситуации задача одна — быстро вернуть доступ к сайту, а уже потом спокойно найти и исправить конкретную ошибку.
Ниже — практический порядок действий: как понять, что именно сломалось, как отключить проблемный код, если админка недоступна, и как проверить, что файл снова работает без ошибок.
Как обычно проявляется ошибка в functions.php
Самый частый сценарий — белая страница, сообщение There has been a critical error on this website, ошибка 500 или недоступность только части сайта: главной, админки или отдельных страниц. Иногда сайт открывается, но в журнале ошибок уже есть предупреждение или фатальная ошибка, и после следующего обновления страница «падает» окончательно.
Для functions.php характерно то, что ошибка может проявиться сразу после сохранения файла. Это удобно для диагностики: если до правки сайт работал, а после неё перестал — почти всегда виноват последний фрагмент кода или строка рядом с ним.
Сначала восстановите доступ, а не ищите ошибку вслепую
Если сайт не открывается, не пытайтесь «добавить ещё одну правку» через админку. Сначала нужно вернуть рабочую версию файла. Самый безопасный путь зависит от того, есть ли у вас доступ к хостингу, FTP/SFTP или файловому менеджеру.
1. Откатите последнюю правку в functions.php
Если у вас есть доступ к файлам сайта, откройте wp-content/themes/ваша-тема/functions.php и верните файл к последней рабочей версии. Если вы не делали резервную копию, удалите только тот фрагмент, который добавляли последним.
Если правка была небольшой, обычно достаточно убрать:
- последний добавленный блок кода;
- лишнюю закрывающую или открывающую скобку;
- точку с запятой в конце строки, если ошибка синтаксическая;
- вызов функции, которой нет в теме или плагине.
После сохранения обновите сайт. Если он открылся, значит проблема действительно была в этом файле.
2. Если админка недоступна, временно отключите тему
Когда ошибка не даёт попасть даже в админку, проще всего временно переключить тему. Для этого через FTP/SFTP или файловый менеджер переименуйте папку активной темы, например my-theme в my-theme-off. WordPress не найдёт текущую тему и попытается перейти на другую установленную тему.
Этот способ полезен, если ошибка сидит именно в теме, а не в плагине или ядре. Но делать это стоит аккуратно: после переименования сайт может выглядеть иначе, а некоторые настройки темы временно станут недоступны.
3. Если есть резервная копия, восстановите только functions.php
Когда перед правками был бэкап, не обязательно откатывать весь сайт. Достаточно вернуть только functions.php из копии. Это быстрее и безопаснее, чем восстанавливать базу данных или весь архив сайта.
Если резервной копии нет, сначала сохраните текущую сломанную версию файла отдельно, например как functions.php.broken. Это позволит сравнить её с рабочим вариантом позже и не потерять изменения, которые могли быть полезны.
Как найти конкретную ошибку в functions.php
Когда сайт снова открывается или вы можете работать с файлами, переходите к поиску причины. В PHP ошибки в functions.php обычно попадают в одну из нескольких категорий: синтаксис, конфликт имён, несовместимость с версией PHP или вызов кода в неподходящий момент.
Проверьте журнал ошибок PHP
Самый полезный источник — error log на хостинге. В нём обычно есть точное сообщение и номер строки. Ищите записи вида PHP Parse error, Fatal error или Uncaught Error. В сообщении часто указаны файл и строка, например functions.php on line 87.
Если у хостинга нет удобного интерфейса для логов, иногда журнал можно включить через WordPress. Для этого в wp-config.php временно добавляют или включают такие настройки:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);После этого ошибки будут записываться в файл wp-content/debug.log. Это удобнее, чем выводить их на экран, особенно на рабочем сайте. Когда закончите диагностику, верните WP_DEBUG в false, чтобы не светить технические детали посетителям.
Сверьте строку ошибки с последними изменениями
Если лог указывает на конкретную строку, не ограничивайтесь ею одной. В PHP ошибка часто находится строкой выше: не закрыт массив, пропущена запятая, не закончена строка или не закрыта фигурная скобка. Поэтому проверяйте небольшой участок кода вокруг проблемного места, а не только одну строку.
Особенно внимательно смотрите на такие случаи:
- лишняя или пропущенная
},),]; - открытый PHP-тег без закрытия там, где он нужен по структуре файла;
- кавычки, которые не совпадают по типу или не закрыты;
- запятая в конце массива, если код написан с ошибкой в синтаксисе старой версии PHP;
- вызов функции до того, как она объявлена, если код зависит от порядка загрузки.
Проверьте совместимость с версией PHP
Иногда код написан для более старой или более новой версии PHP, чем та, что используется на хостинге. Например, старые конструкции могут перестать работать после обновления PHP, а новый синтаксис будет недоступен на старой версии. Если ошибка появилась после смены версии PHP, сначала откатите версию на ту, с которой сайт работал, а потом уже адаптируйте код.
Это не повод надолго оставлять устаревший PHP, но для восстановления доступа такой откат часто помогает быстро подтвердить причину.
Какие ошибки в functions.php встречаются чаще всего
На практике большинство поломок сводится к нескольким типовым ситуациям. Их удобно проверять в первую очередь, потому что они встречаются чаще всего и исправляются быстрее всего.
| Симптом | Что проверить | Что обычно делать |
|---|---|---|
| Белая страница сразу после сохранения | Синтаксис последнего блока | Удалить или исправить последнюю вставку, сверить скобки и кавычки |
| Ошибка 500 | Журнал ошибок PHP | Найти строку с Fatal error или Parse error |
| Сайт не открывается после копирования кода из интернета | Совместимость и имена функций | Проверить, не дублируется ли функция и подходит ли код под вашу версию PHP |
| Ошибка появилась после обновления PHP | Старый синтаксис в теме | Либо адаптировать код, либо временно вернуть прежнюю версию PHP |
Отдельно стоит проверить, не объявляете ли вы функцию с именем, которое уже используется в теме или плагине. В PHP это приводит к фатальной ошибке вида Cannot redeclare function. Если видите такое сообщение, переименуйте свою функцию, сделав имя более уникальным.
Как безопасно тестировать правки, чтобы не уронить сайт снова
Лучший способ не ловить белую страницу на рабочем сайте — проверять изменения на копии. Подойдёт staging-окружение на хостинге или локальная копия сайта. Тогда вы сможете спокойно вставить код, обновить страницу и посмотреть, не появилась ли ошибка.
Если тестовой копии нет, хотя бы работайте по короткому циклу: одна правка — сохранение — проверка. Не вставляйте сразу несколько кусков кода, иначе потом будет сложно понять, какой именно из них сломал сайт.
Перед редактированием functions.php полезно сделать минимум две вещи:
- сохранить копию файла на компьютер;
- запомнить или записать, что именно вы меняете и зачем.
Это экономит время, когда нужно быстро откатить неудачный фрагмент.
Если ошибка неочевидна, отключайте код по частям
Когда логов нет или они не дают точного ответа, помогает метод исключения. Разделите functions.php на логические блоки и временно отключайте их по одному. Самый простой способ — закомментировать подозрительный участок и проверить сайт после каждого шага.
Если файл большой, ищите не весь код подряд, а именно последние добавленные функции, хуки и фильтры. Обычно проблема находится в одном из них. Особенно часто ломают сайт:
- код, который подключает файл через
requireилиincludeи тянет за собой ошибку из другого файла; - обработчики хуков с неправильным количеством аргументов;
- код, который обращается к функциям плагина, хотя плагин ещё не активен;
- фрагменты, вставленные без проверки на существование функции через
function_exists().
Если вы добавляете собственные функции в тему, полезно оборачивать их в проверку существования, чтобы избежать повторного объявления:
if ( ! function_exists( 'my_theme_custom_function' ) ) {
function my_theme_custom_function() {
// код функции
}
}Это не лечит синтаксические ошибки, но защищает от части конфликтов при повторной загрузке кода.
Как понять, что проблема действительно исправлена
После правки не ограничивайтесь открытием главной страницы. Проверьте несколько точек входа: главную, запись, страницу, админку и, если есть, страницу с формой или шаблон, который использует добавленный вами код. Ошибка в functions.php может проявляться не везде одинаково.
Дальше посмотрите журнал ошибок ещё раз. Если после исправления в логе больше нет новых записей, связанных с этим файлом, значит вы нашли и устранили причину. Если ошибка исчезла, но сайт работает нестабильно, значит в коде осталась логическая проблема, которая пока не приводит к фатальному падению, но может проявиться позже.
Самый надёжный итоговый тест — открыть сайт в обычном режиме, выйти из админки, снова войти и проверить, что изменения в теме не ломают загрузку страниц и не вызывают новых сообщений в логах.
Когда лучше не править functions.php вручную
Если вы не уверены в PHP-синтаксисе, а сайт уже лежит в продакшене, не стоит экспериментировать прямо в рабочем файле. В таких случаях безопаснее сначала восстановить стабильную версию, а потом вносить изменения через копию темы или дочернюю тему. Это особенно важно, если правки нужны не разово, а на постоянной основе.
Для небольших точечных исправлений functions.php подходит, но для регулярной доработки темы лучше использовать дочернюю тему или отдельный мини-плагин. Тогда обновление основной темы не затрёт ваши изменения, а риск случайно сломать сайт будет ниже.
Если после всех проверок ошибка остаётся, а лог указывает на код, который вы не понимаете, не пытайтесь «угадать» исправление. Сначала сохраните текущую версию файла, затем сравните её с рабочей копией или покажите конкретное сообщение об ошибке разработчику. В случае с functions.php это быстрее и безопаснее, чем бесконечно править файл наугад.