Вопрос или проблема
Я пытаюсь использовать pre_set_site_transient_update_plugins
для обновления моего плагина из репозитория GitHub.
Для этого я использую этот пример. На моей дев-системе (MAMP для Mac версия 2.2) все в порядке. Он получает последнюю версию и показывает мне уведомление об обновлении.
Когда я опубликовал его на своей рабочей системе, которая является хостинговым пакетом, я не получаю уведомление об обновлении. Даже после ожидания 12 часов или использования ?force-check=1
.
Что я уже сделал, так это создал простой плагин, который записывает строку в лог WordPress, когда вызывается pre_set_site_transient_update_plugins
. Снова на моей дев-системе это работает, но не на живой системе. Поэтому я думаю, что это связано с конфигурацией PHP.
Кто-нибудь знает, какая настройка может препятствовать выполнению этого фильтра?
Извините за мой поздний ответ, но я нашел решение своей проблемы.
Мой код был в порядке, так же как и мой маленький тестовый плагин. Проблема была в кэшировании моего хостинг-провайдера. Они кэшируют запросы к базе данных, и обновителю потребовалось время, чтобы распознать, что плагин обновлен.
Вы используете старую библиотеку, и, похоже, она зависит от транзиентов для проверки и/или обновления ваших плагинов. Это не должно быть так, потому что транзиенты предназначены для хранения/кэширования временных данных.
Я рекомендую использовать более надежную и зрелую библиотеку, которую мы используем в нашей компании: Plugin Update Checker, смотрите https://github.com/YahnisElsts/plugin-update-checker.
У нее также есть опция принудительной проверки наличия обновлений. Эта библиотека действительно гибкая, вы можете использовать ее для .org, GitHub, BitBucket, GitLab и вашего собственного сервера.
Ответ или решение
Проблема, с которой вы столкнулись, связана с различиями в конфигурации окружения между вашим локальным сервером и хостингом. Прежде всего, важно понять, что функция pre_set_site_transient_update_plugins
предназначена для управления обновлениями плагинов, и её срабатывание может зависеть от нескольких факторов.
-
Кэширование на стороне хостинга: Как вы уже упомянули, кэширование может быть причиной того, что обновления не отображаются на вашем живом сайте. Многие хостинг-провайдеры используют кэширование для оптимизации производительности. Это может касаться как кэширования базы данных, так и кэширования объектов. Обратитесь к своему хостинг-провайдеру, чтобы узнать, как вы можете очистить кэш или отключить его на какое-то время, чтобы проверить, будет ли это иметь значение для обновления плагинов.
-
Настройки PHP: Убедитесь, что на вашем хостинге установлены правильные настройки PHP, такие как разрешение на использование transients и правильные версии PHP и WordPress. Проверьте, включены ли cURL и allow_url_fopen, так как они могут использоваться для запроса данных с GitHub.
-
Использование надёжной библиотеки: Рассмотрите возможность использования более стабильной и поддерживаемой библиотеки, такой как Plugin Update Checker (https://github.com/YahnisElsts/plugin-update-checker). Эта библиотека предоставляет более гибкие методы для обработки обновлений плагинов и может улучшить ваши шансы на успешное получение уведомлений об обновлениях. Она также обладает функцией принудительной проверки обновлений, что может быть полезно в вашей ситуации.
-
Проверка логов: Проверьте логи сервера и WordPress (если они включены), чтобы увидеть, есть ли какие-либо ошибки или предупреждения, которые могут указать на причину проблемы. Это может дать дополнительную информацию о том, почему
pre_set_site_transient_update_plugins
не вызывается. -
Форсирование проверки обновлений: Как вы уже пробовали, использование параметра
?force-check=1
– это один из способов попытаться принудить WordPress проверить наличие обновлений. Если это не сработало, это может подтвердить, что проблема связана с кэшированием.
Проблема, с которой вы столкнулись, скорее всего, касается кэширования на стороне хостинга, и ее можно решить, если обратиться к провайдеру за поддержкой по этому вопросу. Перход на более зрелую библиотеку для обновлений также может помочь избежать подобных проблем в будущем.