Wie kann ein Plugin ein Skript ausführen, nachdem es in MultiSite aktualisiert wurde?

Stellen Sie sich ein WordPress MultiSite Netzwerk mit Plugin Foo vor (aber nur auf einigen Seiten aktiv). Wenn das Plugin Foo von Version 1.0 auf 2.0 aktualisiert wird, möchte Foo etwas Arbeit in der database machen. (Nehmen wir für diese Übung an, dass sie nicht mehr Daten in 10 verschiedenen wp_options Zeilen speichern und alles in einem serialisierten Array speichern möchte.)

Wie kann Foo sein foo_db_update-Skript für jede Site ausführen, wenn Foo aktualisiert wird?

Eine allgemeine Antwort ist, dass Foo sich in admin_init einklinken und die aktuelle Version von Foo gegen die db-stored-Version prüfen sollte, um zu sehen, ob es dieses Skript ausführen muss. Das Hauptproblem besteht darin, dass dies in einer MultiSite-Umgebung nicht einfach möglich ist. Dieser Ansatz könnte funktionieren, wenn ich einfach die admin_init-Ereignisse aller Sites im Netzwerk auslösen könnte – mit den aktuellen Plugins jeder Seite -, aber ich weiß nicht, wie ich das machen soll.

Ich habe versucht, sich in wpmu_upgrade_site einzuklinken und nach der Aktualisierung von Foo auf Version 2.0 das Upgrade-Netzwerk auszuführen. Dies verwendet jedoch nur switch_to_blog, um als jede Site zu fungieren, und lädt die Plugins nicht für jede Site, zu der sie wechselt. Dies bedeutet, dass, wenn Foo eine function zu wpmu_upgrade_site hinzufügt, diese function nicht ausgetriggers wird, wenn auf “Netzwerk aktualisieren” vom Network Admin geklickt wird.

Was ist also der beste Weg für ein Plugin, ein solches Skript in einer MultiSite-Umgebung auszuführen?

Solutions Collecting From Web of "Wie kann ein Plugin ein Skript ausführen, nachdem es in MultiSite aktualisiert wurde?"

Es empfiehlt sich, ähnliche DB-Aktualisierungen pro Site durchzuführen. Sie können die Plugins-Version in wp_options (Optionen für die aktuelle Site) admin_init , dann auf admin_init die Version vergleichen und das Upgrade ausführen.

Wenn Sie kompliziertere / größere Updates ausführen möchten, würde ich empfehlen, eine benutzerdefinierte Aktualisierungsseite für das Plug-in zu erstellen und nur Administratorbenachrichtigungen für Benutzer anzuzeigen, damit diese manuell ausgeführt werden können.