Как известно, не так давно вышла новая версия php 8 – замечательно! Исправлены недочёты предыдущих версий, внесены некоторые корректировки в язык программирования и т.п. словом, по заявлениям разработчиков – php стал много быстрее и безопаснее! Хорошо.
Но мы понимаем, что в php 8 ошибок больше и он медленнее, чем, скажем, грядущий php 9. Но это не суть… а суть в том, что наши сайты бесспорно нуждаются в модернизации! Например, многие, если изменяют на хостинге версию до обновленной, то сайты просто-напросто ложатся: белый экран. И, если у нас шаблон сайта не обновляется (и мы не используем дочернюю тему), то никто за нас исправления в код шаблонов не внесёт. Сайт не будет нормально работать!..
…я за последнее время многим правил шаблоны под новый php. Пришло время написать небольшую статью по теме, как исправить ошибки шаблона сайта для php 8. Сделаю, на основе ваших пожеланий, видеоролик, в котором мы прямо на рабочем сайте от начала (когда сайт “ложится” и до конца (когда вновь заработает”) поправим шаблон, так что пишите пожелания о темах, которые нужно включить в ролик (если тема версий php в связке с WordPress будет интересна, буду её расширять, дополнять. Так что жду откликов…).
- нужно ли править шаблон под новые версии php?
- написание кода, комментирование кода php – правила
- подготовка шаблона к включению на сервере версии php 8
- установим на сайте плагин Query Monitor
- переходим к основному решению задач перехода сайта на новую версию php 8
- ошибки или несоответствия кода шаблона для версии php 8
- для владельцев магазинов на WooCommerce – ошибки сайта-магазина по версии php 8
нужно ли править шаблон под новые версии php?
Это вопрос достаточно глобальный по своей сути и вряд ли получится однозначно ответить, окромя сакраментального – каждый решает сам.
Однако по статье приведу несколько примеров, а вы уж делайте выводы.
К примеру, вы решили оставить для своего сайта устаревшую версию. идет время… плагины и вообще все окружающие веб мощности естественным образом обновляются… Вывод, через какое-то время ваш сайт откажется работать с обновленными плагинами и т.п. Вам придется сайт заморозить! т.е. использовать старый функционал. Хорошо это или плохо!? ответить трудно.
Если немного смыслите в сайтостроении – это одно дело, а если – нет, это совсем иное…
Думаю, как ни крути, но самое логичное – постепенно – приводить код шаблона в порядок.
В текущем посте дам несколько вариантов исправления ошибок по текущим версиям php. У вас, конечно, могут возникнуть какие-то иные ошибки… Пишите о них, поправим…
написание кода, комментирование кода php – правила
…предположим, ваши сайты работали на php 7.4.
Для того, чтобы приступить к глобальным правкам шаблона, подготовим сайт на текущей старой версии:
Рекомендую создать копию сайта и выполнять правки на тестовом варианте сайта (как создать тестовый сайт за несколько минут).
Возможно, послужит пользой прочесть об истории обновлений версий Вордпресс.
подготовка шаблона к включению на сервере версии php 8
О том, что плагины должны быть обновлены, разговор выведем за скобки – это и так ясно!
Первое, с чего начнем концерт, это обратим внимание на написание кода в шаблоне: php 8 строже относится к помаркам в коде. К неряшливому коду…
Проверьте файлы шаблона. Отнеситесь внимательнее к комментариям в коде.
Например, если в финале файла размещен какой то комментарий, то он должен быть обязательно соответственно закрыт. Иначе, как только переключитесь на 8-ку – сайт обрушится.
то есть должно быть /* коммент */
.
Подробнее читать как закомментировать код HTML, CSS, PHP, JS (есть подробное видео).
установим на сайте плагин Query Monitor
Устанавливаем и активируем плагин…
…и, конечно же, непосредственно перед правкой добавляем в константу define('WP_DEBUG', true);
параметр true.
это в конфигурации сайта – в файле по пути /домен/public_html/wp-config.php – файл wp-config.php
Этап подготовки сайта для смены версии php считаем законченным.
переходим к основному решению задач перехода сайта на новую версию php 8
Непременно включаем всё наше внимание!!
…и переходим в соответственный раздел настроек хостинга и переключаем сервер на php 8
.
…как правило после смены версии сервера, сайт падает!!
Однако, мы подготовились…
Открываем, например, главную страницу сайта (фронтэнд) – ну или админку.
То, что мы используем в конфигурации сайта дебаггер… и плагин Query Monitor нас здорово выручит! В этом случае перед нашими глазами будет не молчаливый белый экран, но подсказки ошибок!!!
…на белом листе сайта появятся подсказки о возможных ошибках (у кого-то может быть сайт и не совсем сломается… то есть будут частично видны элементы сайта, но в любом случае дебаггеры укажут подсказки о возможных ошибках, с решения которых – методично – и приступаем к исправлению):
Проходим по указанным путям и выполняем правки шаблона. На этом этапе, как правило, указываются главные ошибки – на которых спотыкается сервер. Все их нужно исправить.
Скрин выше, как раз указывает на то, как я и говорил выше, что комментарий в финале кода шаблона не закрыт!!! Поправляем, если у вас что-то подобное…
Подробнее станем разбираться в видеорлике.
ошибки или несоответствия кода шаблона для версии php 8
примеры ниже – только принципиальные примеры, возможные решения!
по мере испрвления ошибок шаблона – плагин Query Monitor подскажет о том, что в коде шаблона используется устаревшая функция, которая теперь вызывает фатальную ошибку в версии php 8
:
Функция create_function() – достаточно частая ошибка в старых шаблонах.
Дело в том, что функция create_function()
считается устаревшей и в более новых версиях php будет вызывать ошибки. Так в версии php 8
она вызовет фатальную ошибку.
Исправляем примерно такими вариантами:
Например, есть известный код (фильтр) относительно безопасности сайта – многие его используют:
// уборка ошибки неправильный логин/пароль для ранних версий php 8
add_filter( 'login_errors', create_function( '$a', "return null;" ));
данный фильтр в php 8
теперь вызывает фатальную ошибку!
Исправить create_function
можно следующим образом: (заменяем create_function
на анонимную функцию – подробности о функциях в этой статье опускаю).
Так:
// первый вариант для версий php 8 = будет пустое поле ошибки:
//add_filter( 'login_errors', fn()=> null );
либо так:
//2 вариант для версий php 8
function no_logs_s() { return 'Вы совершили ошибку при наборе данных'; }
add_filter( 'login_errors', 'no_logs_s' );
/*уборка ошибки неправильный логин/пароль*/
либо ещё один пример:
// неправильно - устаревший пример
if($this->options['general']['clean_exerpts']) {
add_filter('excerpt_more', create_function('', 'return "";') );
}
правильно:
// ИСПРАВЛЕНО:
if($this->options['general']['clean_exerpts']) {
add_filter('excerpt_more', fn()=> null ); }
create_function('', 'return "";')
– заменим на: fn()=> null
для владельцев магазинов на WooCommerce – ошибки сайта-магазина по версии php 8
Если вы работаете с плагином WooCommerce, то вам будет полезно примерно такой вариант решения (много решений – функции Wooc для владельцев магазина):
неправильно:
//число товаров на странице витрины МАГАЗИНА
add_filter('loop_shop_per_page', create_function('$cols', 'return 9;'));
правильно (как вариант):
// исправлено
add_filter('loop_shop_per_page', function( $cols ) { return 9; }, 20);
Этот пример: create_function('$cols', 'return 9;')
заменим на: function( $cols ) { return 9;
То есть заместо устаревшей create_function()
используем ананимную (альтернативную) функцию function()
.
И так далее… в подобном духе исправляем и остальные несоответствия в коде шаблона с обновленной версией php 8
.
Обращайте внимание на добавленный в functions.php активного шаблона код из уруков на веб сайтах – код может иметь ошибки, которые в ранних версиях php более-менее отрабатывали.
…в кодах могут быть на первый взгляд незначительные ошибки, примеру неустановленные одинарные кавычки – всё это в новой версии php вызовет НЕ ТОЛЬКО неотработку отдельного кода, но и фатальную ошибку!
Напоминаю: в видео, которое сейчас готовлю, расскажу по исправлениям ошибок поэтапно. Опишите свои вопросы…
Подробнее об изменениях ЯПа модно почитать в обзоре (на хабре).
Как правильно закомментировать код HTML, CSS или PHP, JS
mihalica.ru !
О, получилось обнаружить форму комментариев!!!
Михаил, я не смыслю в сайтостроении нисколько, шаблон бесплатный, все делала дочь.
Не смогла перейти на новую версию php, сайт расползся немного, исправить не смогли, откатились назад к прежней версии. Это было год назад. Проблем в работе сайта, чувствую, много по этой причине, но меня устраивает.
Как думаете, Михаил, по этой причине он может встать окончательно или как-то тихонько поработает? Выходить в лидеры в ПС не мечтаю особо и не стремлюсь) Что скажете?
Здравствуйте, Людмила!
это вы к тому, что чрезмерно информации..? а куда ж без неё? да я и не Чехов, чтоб кратко резать, знаете ли…
по делу:
Поработает, конечно же…
К примеру, насколько видел – ваш блог томится на Бегет) А там сейчас еще и разговора нет о php 8. Так что…
Тут дело всё в том, что однажды (скоро или нет) сайт может встать из-за несовместимостей, например, с обновленными плагинами в связке с версией WP, темой (кодом)… и т.п.
Если не переходить на новые версии php, то когда-то придется сайт замораживать в едином рабочем состоянии текущего времени.
А касаемо старых версий, то, думаю, они еще будут в арсенале хостингов долго.
Вот примерно из этих обстоятельств и нужно выцеживать решение о смене php (впрочем, я об этом по тексту выше писал).
Здравствуйте, Михаил.
Нет-нет…информация в аккурат в норме, все ясно и понятно. К тому, что не знала, как выйти на продолжение статьи до комментариев)). Привычной кнопки “далее” нет))
Спасибо за ответ. Надо переходить…обращусь к Вам, как созрею. Конфликты плагинов уже ощущаю, например, с Webcraftic Clearfy не обновляется.
Спасибо Михаил.
Несколько ошибок из ваших примеров нашёл у себя на сайте. Исправил. Но что-то ещё чую есть что поправить…
Я вам на почту заказ отправил.
Нужно бы добить проблему. К тому же, думаю, вы поправите что нить полезное… Чтоб 9 версии не бояться)
Здравствуйте, Михаил.
У меня вопрос не по теме статьи. Скажите, а как можно записаться к вам на курс по программированию в среде ВП?
Привет, Вераника!
Только сейчас курс по “уверенному ведению сайта на Вордпресс”. В данный момент он прерван (обстаятельствп) так что напишите мне на почту… И как только возобновим курсовое общение, присоединитесь и вы.