Intereting Posts
Перечислить подстраницу подстраницы Получение WordPress для хранения 0 значений для персонализированных метаданных типа сообщения Как объединить два массива в одном массиве и сохранить в базе данных Установить статическую страницу / сообщение из другого блога в той же сети Как получить подписной ключ или идентификатор, используя подписки Woocommerce Как обфускать URL-адреса каталога темы Добавить образ «руководства» на страницу пользовательского типа сообщений Таблицы базы данных Утерянные индексы? Как восстановить? Правила перезаписи WordPress для пользовательского типа и таксономии Лучший способ предотвратить повторное дублирование при использовании нескольких циклов Шаблоны пользовательских сроков Как отключить поле comment_notes_before в WordPress comment_form проверьте, существует ли файл в папке плагина из установки локали Правильные постоянные ссылки и ошибка 404 Как редактировать изображение блока

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

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

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

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

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

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

Solutions Collecting From Web of "Как плагин запускает скрипт после обновления в MultiSite?"

Это хорошая идея для запуска подобных обновлений БД на сайт. Вы можете сохранить версию плагинов в wp_options (которые являются параметрами для текущего сайта), а затем в admin_init сравнить версию и запустить обновление.

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