Ich entwickle ein WordPress-Plugin, das Updates erfordert, obwohl die Plugin-Version von meinem Server aus überprüft wird. Es gibt mehrere von mir entwickelte Plugins, die genau denselben Server verwenden, um nach neuen Versionen zu suchen. Das Problem, das ich habe, ist, dass, wenn alle Plugins ein Update erfordern und ich auf Details anzeigen klicke, eines der Plugins Details des Updates (Version, Beschreibung usw.) anzeigt, aber die anderen Plugins keine Informationen anzeigen . Nach einigem Debuggen kann ich sehen, dass der Server mit Sicherheit Daten zurückgibt.
Meine Frage ist, wie kann ich den plugins_api-Filter mehrmals anwenden, ohne dass er mit den anderen Plugins in Konflikt gerät?
Deine Beobachtung ist richtig. Es ist nicht offensichtlich. Sogar das Buch von Brad und Ozh (Plugin Development Hrsg. Wrox) enthält einen Fehler im Beispiel auf Seite 267 im Kapitel „Erstellen Sie Ihr eigenes API-Repository“. Wie Sie habe ich (verlorene) Zeit damit verbracht, das Problem mit zwei Plugins in einer alternativen API zu finden …
Die Lösung:
Denken Sie daran, dass dieser erste Parameter im WP-Filter der ursprüngliche Wert ist, der an den Filter übergeben wird. Um also die Filter zu verketten (aufgelistet von Plugins mit alternativen APIs) … muss die erste Zeile lauten:
function xiliw_altapi_information( $false, $action, $args ) {
$plugin_slug = plugin_basename( __FILE__ );
// Check if this plugins API is about this plugin
if( $args->slug != $plugin_slug ) {
return $false; // var to conserve the value of previous filter of plugins list in alternate api. fixes book error not val false
}
// POST data to send to your API
$args = array(
'action' => 'plugin_information',
'plugin_name' => $plugin_slug,
'version' => $transient->checked[$plugin_slug],
'registration' => $this->registration
);//../..
Durch diesen Test gibt bei jedem Aufruf der Liste der Hooks nur einer – das betreffende Plugin – die richtige Antwort, um die Informationen für das Begrüßungsfenster anzuzeigen.
Wenn ich Zeit habe, werde ich wahrscheinlich bald einen vollständigeren Artikel über eine Klasse veröffentlichen, um diese alternative leistungsstarke API zu verwalten und wie man sie zu einem -privaten- Plugin hinzufügt.