Как заменить устаревшие функции и хуки в индивидуальное теме WordPress?
В журнале ошибок есть такие строки:
[03-May-2023 15:39:19 UTC] PHP Deprecated: Функция set_preview_mode с версии 3.0 <strong>считается устаревшей</strong>! Используйте set_mode(). in .../public_html/wp-includes/functions.php on line 5413 [03-May-2023 15:39:19 UTC] PHP Deprecated: Хук block_categories с версии 5.8.0 <strong>считается устаревшим</strong>! Используйте block_categories_all. in .../public_html/wp-includes/functions.php on line 5788 |
[03-May-2023 15:39:19 UTC] PHP Deprecated: Функция set_preview_mode с версии 3.0 <strong>считается устаревшей</strong>! Используйте set_mode(). in .../public_html/wp-includes/functions.php on line 5413 [03-May-2023 15:39:19 UTC] PHP Deprecated: Хук block_categories с версии 5.8.0 <strong>считается устаревшим</strong>! Используйте block_categories_all. in .../public_html/wp-includes/functions.php on line 5788
Но в указанном файле такой функции и хука нет.
Видимо, из-за этого белый экран при редактировании страниц. Сменил тему — страница открылась. Но нужно остаться на старой теме.
Дополнительно
С помощью поиска нашел хук block_categories и заменил его на block_categories_all. Одна ошибка исчезла.
Путь к файлу:
/wp-content/plugins/carbon-fields/vendor/htmlburger/carbon-fields/core/Container
...wp-contentpluginscarbon-fieldsvendorhtmlburgercarbon-fieldscoreContainerBlock_Container.php
Строка 250: public function set_preview_mode( $preview = true ) {
...wp-contentthemestwoliveblocksmale-female.php
Строка 19: ->set_preview_mode( true )
...wp-contentthemestwoliveblocksquestion.php
Строка 37: ->set_preview_mode( true )
...wp-contentthemestwoliveblocksscheme.php
Строка 34: ->set_preview_mode( true )
...wp-contentthemestwoliveblocksvideo.php
Строка 32: ->set_preview_mode( true )
Заменил везде set_preview_mode на set_mode, но сайт перестал открываться:
«На сайте возникла критическая ошибка. Пожалуйста, проверьте входящие сообщения почты администратора для дальнейших инструкций.»
Ответы:
Скорее всего проблема кроется в том, что используются старые плагины или темы. Решение - обновление на новую версию.
Но учитывая, что темы/плагины могут быть видоизменены, то такое обновление может грозить изменением внешнего вида или/и функциональности сайта.
Поэтому желательно первоначально попробовать сделать сохранение всех файлов и базы, после чего попробовать обновить, в идеале даже локально.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Устаревшие функции и хуки в индивидуальной теме WordPress нужно менять постепенно: сначала включить логирование deprecated notices, потом заменить конкретные вызовы на современные аналоги. Не делайте массовую замену вслепую.
Включите лог:
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);
Типовые замены:
get_bloginfo('stylesheet_directory')→get_stylesheet_directory_uri();query_posts()→WP_Query;create_function()→ анонимная функция;$wpdb->prepare().Если в логе есть deprecated message, он обычно прямо пишет, чем заменить функцию:
Function X is deprecated since version Y! Use Z instead.
После каждой группы замен проверяйте ключевые страницы сайта: главную, архив, запись, WooCommerce, формы. Устаревшие хуки иногда всё ещё работают, но при обновлении PHP/WordPress могут начать ломать сайт.
Лучший подход: составить список deprecated, заменить самое критичное, протестировать, потом двигаться дальше.