Как известно, не так давно вышла новая версия 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 !
Здравствуйте, Михаил.
У меня вопрос не по теме статьи. Скажите, а как можно записаться к вам на курс по программированию в среде ВП?
Привет, Вераника!
Только сейчас курс по «уверенному ведению сайта на Вордпресс». В данный момент он прерван (обстаятельствп) так что напишите мне на почту… И как только возобновим курсовое общение, присоединитесь и вы.
Спасибо Михаил.
Несколько ошибок из ваших примеров нашёл у себя на сайте. Исправил. Но что-то ещё чую есть что поправить…
Я вам на почту заказ отправил.
Нужно бы добить проблему. К тому же, думаю, вы поправите что нить полезное… Чтоб 9 версии не бояться)
О, получилось обнаружить форму комментариев!!!
Михаил, я не смыслю в сайтостроении нисколько, шаблон бесплатный, все делала дочь.
Не смогла перейти на новую версию php, сайт расползся немного, исправить не смогли, откатились назад к прежней версии. Это было год назад. Проблем в работе сайта, чувствую, много по этой причине, но меня устраивает.
Как думаете, Михаил, по этой причине он может встать окончательно или как-то тихонько поработает? Выходить в лидеры в ПС не мечтаю особо и не стремлюсь) Что скажете?
Здравствуйте, Людмила!
это вы к тому, что чрезмерно информации..? а куда ж без неё? да я и не Чехов, чтоб кратко резать, знаете ли…
по делу:
Поработает, конечно же…
К примеру, насколько видел — ваш блог томится на Бегет) А там сейчас еще и разговора нет о php 8. Так что…
Тут дело всё в том, что однажды (скоро или нет) сайт может встать из-за несовместимостей, например, с обновленными плагинами в связке с версией WP, темой (кодом)… и т.п.
Если не переходить на новые версии php, то когда-то придется сайт замораживать в едином рабочем состоянии текущего времени.
А касаемо старых версий, то, думаю, они еще будут в арсенале хостингов долго.
Вот примерно из этих обстоятельств и нужно выцеживать решение о смене php (впрочем, я об этом по тексту выше писал).
Здравствуйте, Михаил.
Нет-нет…информация в аккурат в норме, все ясно и понятно. К тому, что не знала, как выйти на продолжение статьи до комментариев)). Привычной кнопки «далее» нет))
Спасибо за ответ. Надо переходить…обращусь к Вам, как созрею. Конфликты плагинов уже ощущаю, например, с Webcraftic Clearfy не обновляется.