Intereting Posts
Должны ли мы использовать get_template_part () в файлах функций вместо include_once? как переместить определенную функциональность на промежуточный сервер Отключить плагин от получения стилей из другого плагина Показать все сообщения из выбранного архивного месяца дополнительный тег <a> добавлен в wp_nav_menu Поле ACF не отображается правильно в цикле Как я могу запросить 2 пользовательских типа сообщений? WP_Query: Meta_Query с сериализованным значением (или обходным путем) wp_enqueue_script регистрирует скрипт, но не создает html-тег как включить файл манифеста json в плагин wp Как включить персонализированные сообщения типа сообщений на странице? Создать пользовательскую панель администратора Защитить get_query_var от ручного ввода в URL-адресе Как выполнить поиск всех пользователей meta из users.php в admin Страница блога Ошибка сервера 500 с циклом post post в файле query.php

Автоматические обновления в плагине – не размещены в репозитории WordPress

Я кодирую плагин, который, вероятно, будет иметь обновления в будущем, и я хочу воспользоваться механизмом автоматического обновления в wordpress.

Я последовал этому руководству :

Для меня все казалось довольно простым, но по какой-то причине ничего не работает. Функция, подключенная к фильтру pre_set_site_transient_update_plugins никогда не pre_set_site_transient_update_plugins .

Я попытался пойти шаг за шагом и просто добавил «Hello» и строку журнала на этом крючке. Он просто не вызывается, даже когда я пытался принудительно проверять обновления.

Есть ли уловка? Кстати, я пытаюсь сделать это на многоуровневой установке.

Любая помощь будет принята с благодарностью.

Арнальдо

UPDATE: я получил функцию, подключенную к pre_set_site_transient_update_plugins для pre_set_site_transient_update_plugins . Как ни странно, если я выполняю крючок внутри конструктора объекта, который имеет функцию проверки, он работает, иначе это не так.

Пример (это работает):

 class XYZ { public function __construct() { add_filter('pre_set_site_transient_update_plugins', array($this, 'check_update')); } public function check_update($transient) { // logic here } } 

Однако, если я просто делаю это в своем основном файле плагина, он не работает:

 add_filter('pre_set_site_transient_update_plugins', array('XYZ', 'check_update')); 

Прежде всего, я хотел бы понять, в чем разница между двумя сценариями. Кроме того, я должен был сделать

 set_site_transient('update_plugins', null); 

чтобы заставить hook быть вызванным, в противном случае я думаю, что мне придется ждать нормальный цикл проверки обновлений WordPress, правильно? И теперь появилась еще одна проблема: переменная $transient которая передается функции check_update() всегда равна нулю! Это из-за инструкции set_site_transient() ? Если да, то как я могу проверить все решение без страдания в течение нескольких часов, чтобы проверить мои последние изменения?

Еще раз спасибо, Арнальдо

ОБНОВЛЕНИЕ 2: @kaiser, поведение точно так, как я описал, даже используя статический метод. Я уже это пробовал.

У вас на самом деле есть несколько вопросов, поэтому я отвечу им один за другим:

Однако, если я просто делаю это в своем основном файле плагина, он не работает:

add_filter('pre_set_site_transient_update_plugins', array('XYZ', 'check_update'));

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

Это не работает, потому что вы вызываете метод статически, а не на экземпляр класса. Поскольку метод не вызывается в экземпляре, свойства класса не заданы. Так, например, когда check_update() попытался использовать $this->current_version , он получит null . По этой причине функция будет считать, что обновление отсутствует.

Кроме того, я должен был сделать

set_site_transient('update_plugins', null);

чтобы заставить hook быть вызванным, в противном случае я думаю, что мне придется ждать нормальный цикл проверки обновлений WordPress, правильно?

Да.

И теперь появилась еще одна проблема: переменная $transient которая передается функции check_update() всегда равна null ! Это из-за инструкции set_site_transient() ?

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

[H] ow я могу проверить все решение без страдания в течение нескольких часов, чтобы проверить мои последние изменения?

Для тестирования измените его на крючок в get_site_transient_update_plugins . Это будет вызвано каждый раз при восстановлении переходного процесса. Возможно, вы захотите установить статическую переменную или что-то еще, поэтому вы не вызываете ее более одного раза на страницу-запрос.

Это может не решить вашу проблему напрямую, но я хотел бы упомянуть, что если вы хотите избежать WordPress.org, вы можете разместить свой плагин на GitHub (или Bitbucket).

Для этого есть плагин updater, и на Tut + это хороший учебник для этого: распространение ваших плагинов в GitHub с автоматическими обновлениями