web-dev-qa-db-fra.com

Comment un plugin peut-il exécuter un script après avoir été mis à jour dans MultiSite?

Imaginez un réseau WordPress MultiSite avec le plugin Foo (mais seulement actif sur certains sites). Lors de la mise à niveau du plug-in Foo de la version 1.0 à la version 2.0, Foo souhaite effectuer certains travaux dans la base de données. (Dans l’intérêt de cet exercice, supposons qu’il veuille arrêter de stocker des données dans 10 lignes wp_options différentes et les stocker dans un tableau sérialisé.)

Comment Foo peut-il exécuter son script foo_db_update, pour chaque site, lorsque Foo est mis à jour?

Une réponse courante est que Foo doit se connecter à admin_init, vérifier la version actuelle de Foo par rapport à la version stockée sur la base de données et voir si elle doit exécuter ce script. Le principal problème ici est que ce n’est pas quelque chose qui peut être facilement fait dans un environnement MultiSite. Cette approche pourrait fonctionner si je pouvais facilement déclencher les événements admin_init de tous les sites du réseau - avec les plugins actuels de chaque site chargés - mais je ne sais pas une façon de faire ça.

J'ai essayé de me connecter à wpmu_upgrade_site et d'exécuter Upgrade Network après la mise à jour de Foo vers la version 2.0. Cependant, cela utilise uniquement switch_to_blog pour agir en tant que site et ne charge pas complètement les plugins pour chaque site vers lequel il bascule. Cela signifie que si Foo ajoute une fonction à wpmu_upgrade_site, cette fonction ne sera pas activée lorsque vous cliquez sur Upgrade Network (Mettre à niveau le réseau) à partir de l’administrateur réseau.

Alors, quel IS le meilleur moyen pour un plugin d'exécuter un tel script dans un environnement MultiSite?

3
MadtownLems

C'est une bonne idée d'exécuter des mises à jour de base de données similaires par site. Vous pouvez stocker la version des plugins dans wp_options (qui sont des options pour le site actuel), puis sur admin_init comparer la version et exécuter la mise à niveau.

Si vous souhaitez exécuter des mises à jour plus complexes/volumineuses, je vous recommande de créer une page de mise à niveau personnalisée pour le plug-in et d'afficher uniquement les avis d'administration pour les utilisateurs, afin qu'ils puissent l'exécuter manuellement.

1
Mamaduka