Вопрос: Как плагин может запустить скрипт после обновления в MultiSite?

Представьте себе многосайтовую сеть WordPress с плагином Foo (но активную только на некоторых сайтах). При обновлении плагина Foo с версии 1.0 до 2.0 Foo хотел бы поработать с базой данных. (Для этого упражнения давайте предположим, что он хочет прекратить хранить данные в 10 разных строках wp_options и сохранить их все в сериализованном массиве.)

Как Foo может запустить свой скрипт foo_db_update для каждого site, когда Foo обновляется?

Распространенным ответом является то, что Foo должен подключиться к admin_init, проверить текущую версию Foo на соответствие версии, хранящейся в db, и посмотреть, нужно ли запускать этот скрипт. Основная проблема здесь в том, что это не то, что легко сделать в среде MultiSite. Этот подход мог бы сработать, если бы я мог легко вызвать события admin_init всех сайтов в сети - с загруженными текущими плагинами каждого сайта - но я не знаю, как это сделать.

< Я попытался подключиться к wpmu_upgrade_site и запустить Upgrade Network после обновления Foo до версии 2.0. Тем не менее, он использует только switch_to_blog, чтобы действовать как каждый сайт, и не полностью загружает плагины для каждого сайта, на который он переключается. Это означает, что если Foo добавляет функцию в wpmu_upgrade_site, эта функция не сработает при нажатии кнопки «Обновить сеть» у администратора сети.

Итак, что является лучшим способом для плагина запустить такой скрипт в среда MultiSite?

Ответы и комментарии:

Проблема с запуском этих обновлений для каждого сайта заключается в том, что плагины будут раздуты с накладными расходами для обратной совместимости. Необходимо постоянно проверять номер версии, последний раз записанный в базе данных, а затем иметь код для обработки как предыдущего, так и нового метода хранения.
Создан 01-07-2014 03:36 MadtownLems

Вы можете выполнить эту проверку, только если администратор вошел в систему и находится в Panel (значительно сократит количество проверок и позволит устанавливать предупреждения об обновлениях). Также вы можете установить опцию автозагрузки (будет кэшироваться) при установке add_option. Я не понял проблему обратной совместимости ...
Создан 11-10-2017 12:15 Maxwell s.c

Рекомендуется запускать аналогичные обновления БД для каждого сайта. Вы можете сохранить версию плагинов в wp_options (которые являются опциями для текущего сайта), затем в admin_init сравнить версию и запустить обновление.
Если вы хотите запускать более сложные / большие обновления, я бы порекомендовал создать пользовательскую страницу обновления для плагина и отображать только уведомление администратора для пользователей, чтобы они могли запускать его вручную.
Создан 01-07-2014 09:52 Mamaduka3,52412024