Как заменить устаревшие функции и хуки в индивидуальное теме WordPress?

Ссылка скопирована
1 ответ

В журнале ошибок есть такие строки:

[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, но сайт перестал открываться:
    «На сайте возникла критическая ошибка. Пожалуйста, проверьте входящие сообщения почты администратора для дальнейших инструкций.»

  • Ответы:

    Скорее всего проблема кроется в том, что используются старые плагины или темы. Решение - обновление на новую версию.

    Но учитывая, что темы/плагины могут быть видоизменены, то такое обновление может грозить изменением внешнего вида или/и функциональности сайта.

    Поэтому желательно первоначально попробовать сделать сохранение всех файлов и базы, после чего попробовать обновить, в идеале даже локально.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Елена Вебер Ответ

    Устаревшие функции и хуки в индивидуальной теме WordPress нужно менять постепенно: сначала включить логирование deprecated notices, потом заменить конкретные вызовы на современные аналоги. Не делайте массовую замену вслепую.

    Включите лог:

    define('WP_DEBUG', true);
    define('WP_DEBUG_LOG', true);
    define('WP_DEBUG_DISPLAY', false);

    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;
    • старые WooCommerce hooks → актуальные templates/hooks;
    • create_function() → анонимная функция;
    • прямые SQL без prepare → $wpdb->prepare().

    Если в логе есть deprecated message, он обычно прямо пишет, чем заменить функцию:

    Function X is deprecated since version Y! Use Z instead.

    Function X is deprecated since version Y! Use Z instead.

    После каждой группы замен проверяйте ключевые страницы сайта: главную, архив, запись, WooCommerce, формы. Устаревшие хуки иногда всё ещё работают, но при обновлении PHP/WordPress могут начать ломать сайт.

    Лучший подход: составить список deprecated, заменить самое критичное, протестировать, потом двигаться дальше.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно