Вопрос или проблема
Я пытаюсь переключить свой сайт WordPress на новую тему. Я смог воспроизвести первоначальную проблему на своем живом сайте, но все дальнейшее тестирование проводил в локальной тестовой среде.
Проблема: Пока я остаюсь с текущей темой, персонализатор работает нормально. Однако, как только я переключаюсь на другую тему, персонализатор перестает работать. Он показывает только пустую страницу в живом предварительном просмотре и никаких опций в левом боковом меню.
Вот что я пробовал/нашел до сих пор:
- WordPress на версии 6.1.1
- Проблема возникает в браузерах Chrome, Brave и Firefox (другие не пробовал)
- Проблема возникает как на PHP 7.4, так и на 8.0 и 8.1
- Очистил все кеши
- Деактивировал все плагины
- Снова сохранил настройки постоянных ссылок
- Проблема также возникает с стандартными темами WordPress (я пробовал 2019 и 2021)
- Плагин проверки здоровья WordPress не показал никаких проблем или ошибок
- Отладка сценариев не решила проблему
- Заменил файлы wp-admin и wp-includes файлами из чистой установки WP без эффекта
- Поддержка текущей темы (Newspaper от tagdiv) подтвердила, что они не используют никаких элементов персонализатора, которые могли бы вызвать эту проблему
Ошибка в консоли JavaScript
Uncaught SyntaxError: Unexpected token '<' ; customize.php:6017
Я получаю следующие ошибки в журнале ошибок PHP:
[19-Nov-2022 14:00:13 UTC] PHP Warning: parse_url() ожидает строку в качестве первого параметра, массив получен в […]\wp-includes\media.php на строке 5104
[19-Nov-2022 14:00:13 UTC] PHP Stack trace:
[19-Nov-2022 14:00:13 UTC] PHP 1. {main}() […]\wp-admin\customize.php:0
[19-Nov-2022 14:00:13 UTC] PHP 2. do_action() […]\wp-admin\customize.php:292
[19-Nov-2022 14:00:13 UTC] PHP 3. WP_Hook->do_action() […]\wp-includes\plugin.php:517
[19-Nov-2022 14:00:13 UTC] PHP 4. WP_Hook->apply_filters() […]\wp-includes\class-wp-hook.php:332
[19-Nov-2022 14:00:13 UTC] PHP 5. WP_Customize_Manager->customize_pane_settings() […]\wp-includes\class-wp-hook.php:308
[19-Nov-2022 14:00:13 UTC] PHP 6. WP_Customize_Cropped_Image_Control->json() […]\wp-includes\class-wp-customize-manager.php:4985
[19-Nov-2022 14:00:13 UTC] PHP 7. WP_Customize_Cropped_Image_Control->to_json() […]\wp-includes\class-wp-customize-control.php:337
[19-Nov-2022 14:00:13 UTC] PHP 8. WP_Customize_Cropped_Image_Control->to_json() […]\wp-includes\customize\class-wp-customize-cropped-image-control.php:78
[19-Nov-2022 14:00:13 UTC] PHP 9. attachment_url_to_postid() […]\wp-includes\customize\class-wp-customize-upload-control.php:59
[19-Nov-2022 14:00:13 UTC] PHP 10. parse_url() […]\wp-includes\media.php:5104
[19-Nov-2022 14:00:13 UTC] PHP Warning: strpos() ожидает строку в качестве первого параметра, массив получен в […]\wp-includes\media.php на строке 5111
[19-Nov-2022 14:00:13 UTC] PHP Stack trace:
[19-Nov-2022 14:00:13 UTC] PHP 1. {main}() […]\wp-admin\customize.php:0
[19-Nov-2022 14:00:13 UTC] PHP 2. do_action() […]\wp-admin\customize.php:292
[19-Nov-2022 14:00:13 UTC] PHP 3. WP_Hook->do_action() […]\wp-includes\plugin.php:517
[19-Nov-2022 14:00:13 UTC] PHP 4. WP_Hook->apply_filters() […]\wp-includes\class-wp-hook.php:332
[19-Nov-2022 14:00:13 UTC] PHP 5. WP_Customize_Manager->customize_pane_settings() […]\wp-includes\class-wp-hook.php:308
[19-Nov-2022 14:00:13 UTC] PHP 6. WP_Customize_Cropped_Image_Control->json() […]\wp-includes\class-wp-customize-manager.php:4985
[19-Nov-2022 14:00:13 UTC] PHP 7. WP_Customize_Cropped_Image_Control->to_json() […]\wp-includes\class-wp-customize-control.php:337
[19-Nov-2022 14:00:13 UTC] PHP 8. WP_Customize_Cropped_Image_Control->to_json() […]\wp-includes\customize\class-wp-customize-cropped-image-control.php:78
[19-Nov-2022 14:00:13 UTC] PHP 9. attachment_url_to_postid() […]\wp-includes\customize\class-wp-customize-upload-control.php:59
[19-Nov-2022 14:00:13 UTC] PHP 10. strpos() […]\wp-includes\media.php:5111
[19-Nov-2022 14:00:13 UTC] PHP Notice: Функция wpdb::prepare была вызвана <strong>неправильно</strong>. Неподдерживаемый тип значения (массив). Пожалуйста, смотрите <a href="https://wordpress.org/support/article/debugging-in-wordpress/">Отладка в WordPress</a> для получения дополнительной информации. (Это сообщение было добавлено в версии 4.8.2.) в […]\wp-includes\functions.php на строке 5835
[19-Nov-2022 14:00:13 UTC] PHP Stack trace:
[19-Nov-2022 14:00:13 UTC] PHP 1. {main}() […]\wp-admin\customize.php:0
[19-Nov-2022 14:00:13 UTC] PHP 2. do_action() […]\wp-admin\customize.php:292
[19-Nov-2022 14:00:13 UTC] PHP 3. WP_Hook->do_action() […]\wp-includes\plugin.php:517
[19-Nov-2022 14:00:13 UTC] PHP 4. WP_Hook->apply_filters() […]\wp-includes\class-wp-hook.php:332
[19-Nov-2022 14:00:13 UTC] PHP 5. WP_Customize_Manager->customize_pane_settings() […]\wp-includes\class-wp-hook.php:308
[19-Nov-2022 14:00:13 UTC] PHP 6. WP_Customize_Cropped_Image_Control->json() […]\wp-includes\class-wp-customize-manager.php:4985
[19-Nov-2022 14:00:13 UTC] PHP 7. WP_Customize_Cropped_Image_Control->to_json() […]\wp-includes\class-wp-customize-control.php:337
[19-Nov-2022 14:00:13 UTC] PHP 8. WP_Customize_Cropped_Image_Control->to_json() […]\wp-includes\customize\class-wp-customize-cropped-image-control.php:78
[19-Nov-2022 14:00:13 UTC] PHP 9. attachment_url_to_postid() […]\wp-includes\customize\class-wp-customize-upload-control.php:59
[19-Nov-2022 14:00:13 UTC] PHP 10. wpdb->prepare() […]\wp-includes\media.php:5116
[19-Nov-2022 14:00:13 UTC] PHP 11. _doing_it_wrong() […]\wp-includes\class-wpdb.php:1453
[19-Nov-2022 14:00:13 UTC] PHP 12. trigger_error() […]\wp-includes\functions.php:5835
[19-Nov-2022 14:00:13 UTC] PHP Notice: Функция wpdb::prepare была вызвана <strong>неправильно</strong>. Запрос ожидал только одно заполнительное значение, но был отправлен массив с несколькими заполнителями. Пожалуйста, смотрите <a href="https://wordpress.org/support/article/debugging-in-wordpress/">Отладка в WordPress</a> для получения дополнительной информации. (Это сообщение было добавлено в версии 4.9.0.) в […]\wp-includes\functions.php на строке 5835
[19-Nov-2022 14:00:13 UTC] PHP Stack trace:
[19-Nov-2022 14:00:13 UTC] PHP 1. {main}() […]\wp-admin\customize.php:0
[19-Nov-2022 14:00:13 UTC] PHP 2. do_action() […]\wp-admin\customize.php:292
[19-Nov-2022 14:00:13 UTC] PHP 3. WP_Hook->do_action() […]\wp-includes\plugin.php:517
[19-Nov-2022 14:00:13 UTC] PHP 4. WP_Hook->apply_filters() […]\wp-includes\class-wp-hook.php:332
[19-Nov-2022 14:00:13 UTC] PHP 5. WP_Customize_Manager->customize_pane_settings() […]\wp-includes\class-wp-hook.php:308
[19-Nov-2022 14:00:13 UTC] PHP 6. WP_Customize_Cropped_Image_Control->json() […]\wp-includes\class-wp-customize-manager.php:4985
[19-Nov-2022 14:00:13 UTC] PHP 7. WP_Customize_Cropped_Image_Control->to_json() […]\wp-includes\class-wp-customize-control.php:337
[19-Nov-2022 14:00:13 UTC] PHP 8. WP_Customize_Cropped_Image_Control->to_json() […]\wp-includes\customize\class-wp-customize-cropped-image-control.php:78
[19-Nov-2022 14:00:13 UTC] PHP 9. attachment_url_to_postid() […]\wp-includes\customize\class-wp-customize-upload-control.php:59
[19-Nov-2022 14:00:13 UTC] PHP 10. wpdb->prepare() […]\wp-includes\media.php:5116
[19-Nov-2022 14:00:13 UTC] PHP 11. _doing_it_wrong() […]\wp-includes\class-wpdb.php:1496
[19-Nov-2022 14:00:13 UTC] PHP 12. trigger_error() […]\wp-includes\functions.php:5835
К сожалению, я сам не могу это понять. Поэтому любые идеи о том, где искать дальше, будут очень признательны. Спасибо большое!
После долгого времени попыток и возни я наконец нашел решение этой проблемы! Я попробовал несколько плагинов для сброса персонализатора и наткнулся на этот. Установив его, я удалил все найденные им настройки тем в базе данных (была одна безымянная, которую я подозревал как виновника). После удаления их всех и очистки кеша браузера экран персонализатора снова заработал! Я не могу выразить, как я счастлив. Поэтому я решил опубликовать это здесь на случай, если кто-то еще столкнется с этой проблемой.
Больше обходной путь, чем решение проблемы: я смог снова запустить персонализатор, деактивировав любые плагины, которые я не использовал (в WordPress перейдите в Плагины).
Примечание: у меня возникала ошибка 500, когда я пытался открыть персонализатор.
- В моем случае из-за проблемы с HTTPS.
- У меня перенаправление HTTPS с CDN (cloudflare), как на основном блоге, так и в wp-admin.
- Чтобы решить проблему, убедитесь, что перенаправление HTTPS применяется только к основному блогу, а не к
wp-admin
. - Или измените URL сайта с
http://blog.your.me
наhttps://blog.your.me
(гипотетически).
.
Ответ или решение
При решении проблемы с загрузкой настройщика WordPress, следует учитывать многочисленные факторы, влияющие на этот процесс. В дальнейшем мы подробно рассмотрим возможные причины этой проблемы и предложим способы её решения.
Теория: Понимание проблемы
Настройщик WordPress — это инструмент, предоставляющий пользователям возможность изменять внешний вид и настройки темы сайта в реальном времени. Однако, бывают случаи, когда он не загружается, что может быть вызвано различными факторами. Вызывает это досаду у пользователей, так как ограничения в доступе к настройкам ограничивают возможности персонализации сайта.
Зачастую такие проблемы могут быть связаны с несовместимостью темы или плагинов, ошибками в коде JavaScript или PHP, конфигурациями сервера и безопасности и даже проблемами кэширования. Понимание данной теории позволяет определить область, где может скрываться источник ошибки.
Пример: Детализация проблемы
Вы столкнулись с проблемой, когда при смене темы в WordPress, настройщик перестаёт работать корректно, отображая лишь пустую страницу. Вы выполнили ряд шагов для диагностики проблемы, но они не привели к нужному результату:
- Проблема не связана с конкретным браузером, так как воспроизводится в Chrome, Brave и Firefox.
- Используемая версия PHP, как и версия WordPress, не являются причиной, поскольку проблема возникает на PHP 7.4, 8.0 и 8.1, а версия WordPress — 6.1.1.
- Проблема сохраняется даже при отключённой деятельности всех плагинов, очищенных кэшах и резовке настроек постоянных ссылок.
- Анализ логов выявил ошибки, такие как
Uncaught SyntaxError: Unexpected token '<'
в консоли JavaScript и предупреждения PHP о неверном типе параметров.
Применение: Рекомендации и Решения
-
Проверка конфигурации HTTPS:
Если на вашем сайте включена HTTPS-редирекция через CDN, как Cloudflare, важно убедиться, что она применяется корректно. Часто проблемы возникают из-за неправильной настройки редиректа для страницы администраторской панели (wp-admin
). Решение — либо исключитьwp-admin
из редиректа, либо изменить URL сайта на HTTPS. -
Очистка настроек кастомизатора:
Использование плагина для сброса настроек кастомизатора может помочь, особенно если дело в конфликтных параметрах темы. Данный метод предполагает удаление всех сохранённых настроек тем в базе данных, что может восстановить работоспособность кастомизатора. -
Обновление файлов:
Вы уже пробовали заменять файлыwp-admin
иwp-includes
, но важно убедиться, что используемая тема совместима с текущей версией WordPress, и что в директориях нет кастомных изменений, влияющих на работу дополнительного функционала. -
Тестирование стандартных тем:
Если проблема сохраняется даже с установленными стандартными темами WordPress (например, Twenty Nineteen или Twenty Twenty-One), это может указывать на более глубокую проблему в настройках WordPress или сервере. -
Углублённое отладка PHP:
Поскольку в логах PHP были выявлены ошибки, связанные с неверными типами данных, рекомендуется произвести полную отладку кода. Это может потребовать обращения к разработчику или специалисту по WordPress, который поможет обратить внимание на спорные места в коде. -
Использование сторонних диагностических инструментов:
Программы и плагины для диагностики могут выявить скрытые конфликты и рекомендации по исправлению возникших ошибок. Это можно дополнить включением режима отладки WordPress, чтобы получать более детальные журналы об ошибках.
Следуя этим рекомендациям, можно значительно повысить вероятность успешного решения проблемы с загрузкой настройщика в WordPress. Однако, если ситуация продолжает оставаться нерешённой, не стоит исключать возможность привлечения профессиональной помощи для глубокой диагностики и устранения неполадок.