Interaktion mit dem Plug-in und der Theme-API von WordPress

Die WordPress Repository-API ist die API, die zum Abrufen von Plug-In- und Design-Informationen zur Verwendung auf Ihren Verwaltungsseiten verwendet wird. Beispielsweise werden die neuesten Plug-Ins im Dashboard angezeigt, Sie können die Themen auf der Registerkarte "Design" anzeigen und Plug-Ins können direkt vom Repository aus gesucht und installiert werden. In diesem Lernprogramm wird beschrieben, wie diese API funktioniert und wie mit dieser auf Informationen zugegriffen werden kann, z. B. die Bewertung Ihres Plug-Ins, wie oft es heruntergeladen wurde, oder sogar auf seine ReadMe-Abschnitte. Mit dieser API können Sie beispielsweise einen Link auf Ihrer Website hosten, der immer auf die neueste Version Ihres Plug-Ins oder Designs verweist.

Wenn WordPress Informationen zu Plug-Ins und Designs aus dem Repository sammelt, sendet es eine Anfrage an eine von zwei URLs.

  • Für Plugins: http://api.wordpress.org/plugins/info/1.0/
  • Für Themen: http://api.wordpress.org/themes/info/1.0/

Die Anfrage hat die Form eines Arrays mit einem 'Aktion' und 'anfordern' Schlüssel.

 $ response = wp_remote_post ('http://api.wordpress.org/plugins/info/1.0/'), array ('body' => array ('action' => $ action, 'request' => serialize ((object ) $ args))));

Details zu einem Plug-In oder Thema erhalten

Beim Abrufen von Daten zu einem Plugin oder ThemaAktion'sollte auf gesetzt sein plugin_information oder thema_information beziehungsweise. Der Wert des Anforderungsschlüssels sollte ein serialisiertes Objekt mit einer Slug-Eigenschaft (dem Slug des Themes / Plug-Ins) und einer Feldeigenschaft sein, die angibt, auf welche Daten wir uns beziehen (die verfügbaren Felder werden unten detailliert beschrieben). Im obigen Ausschnitt, $ args sollte ein assoziatives Array mit Schlüsseln sein, die von diesen Eigenschaften angegeben werden.

Der Rückgabewert von wp_remote_post, $ Antwort, vielleicht ein WP_Query Fehler oder eine echte Antwort aus dem Repository, die eine Fehlernachricht enthält. Wenn alles gut gelaufen ist, kann das zurückgegebene Plug-In oder das Designobjekt mit folgendem Befehl extrahiert werden:

 $ Returns_object = maybe_unserialize (wp_remote_retrieve_body ($ response));

Abfragen der Plug-In- und Theme-Repositorys

Um eine Liste von Designs / Plug-Ins abzurufen, die bestimmten Kriterien entsprechen, sollte die Aktion auf festgelegt werden query_themes oder query_plugins. Dies sollte mit einem geeigneten Schlüssel (z. B. 'Autor', um Plugins / Themes von einem bestimmten Autor zu erhalten) $ args Array. Die möglichen Kriterien sind unten angegeben.

Wiederum (vorausgesetzt, dass keine Fehler aufgetreten sind), sollte das Array der übereinstimmenden Plug-Ins folgendermaßen angegeben werden:

 $ Returns_object = maybe_unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ return_object-> plugins;

und in ähnlicher Weise für Themen:

 $ Returns_object = maybe_unserialize (wp_remote_retrieve_body ($ response)); $ themes = $ Returns_object-> themes;

Jedes Theme- / Plugin-Objekt im Array hat die gleichen Eigenschaften wie die durch den Feldschlüssel im Feld $ args Array. Die verfügbaren Felder sind unten aufgeführt, ebenso wie die Standardfelder (für *_Information Anfragen). Bitte beachten Sie, dass die Standardwerte für verschiedene Aktionen unterschiedlich sind.


Plug-in-Eigenschaften

Wie oben beschrieben $ args ist ein assoziatives Array, das folgende Felder enthalten kann:

  • Schnecke - (Wenn die Aktion ist plugin_information). Der Slug des Plug-Ins, für den die Daten zurückgegeben werden sollen.
  • Durchsuche - (Wenn die Aktion ist query_plugins). Nimmt die Werte vorgestellt, Beliebt oder Neu.
  • Autor - (Wenn die Aktion ist query_plugins). Der WordPress-Benutzername des Autors, um Plugins von einem bestimmten Autor abzurufen.
  • Etikett - (Wenn die Aktion ist query_plugins). Tag, für den Plugins abgerufen werden sollen.
  • Suche - (Wenn die Aktion ist query_plugins). Ein Suchbegriff, mit dem das Repository durchsucht werden soll.
  • Felder - ein Array mit möglichen Feldern (unten aufgeführt) als Schlüssel und wahr oder falsch Wert, um Daten für dieses Feld zurückzugeben oder nicht. Die enthaltenen Felder bilden die Eigenschaften des zurückgegebenen Objekts. Die möglichen Felder sind (Standardeinstellung ist) wahr, wenn nicht anders angegeben):
    • Ausführung - neueste
    • Autor - Name des Autors und Link zum Profil
    • erfordert - die minimale erforderliche WordPress-Version
    • geprüft - die neueste getestete WordPress-Version
    • Kompatibilität - ein Array, das ein Array für jede Version Ihres Plug-Ins enthält. Dieses Array speichert die Anzahl der Stimmen, die Anzahl der Werkstimmen und diese Anzahl in Prozent.
    • heruntergeladen - die Anzahl der Downloads
    • bewertung - als Prozentsatz
    • num_ratings - Anzahl der Bewertungen
    • Abschnitte - Dies ist ein Array mit dem HTML-Code für jeden Abschnitt der WordPress-Plug-In-Seite. Die Werte können Schlüssel enthalten. 'Beschreibung','Installation','Screenshots','Änderungsprotokoll' und 'FAQ'.
    • Download-Link - verweist auf die vom Repository gehostete ZIP-Datei der neuesten Version des Plugins
    • Beschreibung - (Standard falsch)
    • kurze Beschreibung - (Standard falsch)

Andere Felder sind 'Name','Schnecke','autor_profile','Stichworte','Startseite','Mitwirkende','hinzugefügt' und 'letzte Aktualisierung'.

Beispiel

Lassen Sie uns als ein kurzes Beispiel eine Liste von Plug-Ins eines bestimmten Autors sowie die Anzahl der Downloads anzeigen:

 // Setze die Argumente. Der Kürze halber werde ich nur wenige Felder setzen. $ args = array ('author' => 'stephenh1988', 'fields' => array ('downloads' => true, 'downloadlink' => true)); // Anfrage machen und Plug-In-Objekt extrahieren. Die Aktion ist query_plugins $ response = wp_remote_post ('http://api.wordpress.org/plugins/info/1.0/'), array ('body' => array ('action' => 'query_plugins', 'request' => serialize ((object) $ args)))); if (! is_wp_error ($ response)) $ Returns_object = unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ return_object-> plugins; if (! is_array ($ plugins)) // Der Antworttext enthält kein Objekt- / Array-Echo "Ein Fehler ist aufgetreten";  else // Zeigt eine Liste der Plug-Ins und die Anzahl der Downloads an, wenn ($ plugins) echo '
    '; foreach ($ plugins als $ plugin) echo "
  • ".esc_html ($ plugin-> name)." (heruntergeladen ".esc_html ($ plugin-> heruntergeladen)." mal)
  • "; else // Fehlerobjekt gab Echo zurück" Ein Fehler ist aufgetreten ";

Theme-Eigenschaften

Die Themen-API-Anforderung ist sehr ähnlich, obwohl etwas unterschiedliche Felder verfügbar sind.

  • Schnecke - (Wenn die Aktion ist thema_information) Der Slug des Themas, für das die Daten zurückgegeben werden sollen.
  • Durchsuche - (Wenn die Aktion ist query_themes). Nimmt die Werte vorgestellt, Neu oder aktualisierte.
  • Autor - (Wenn die Aktion ist query_themes). Der Benutzername des Autors, um Themen von einem bestimmten Autor abzurufen.
  • Etikett - (Wenn die Aktion ist query_themes). Ein Array von Tags, mit denen Designs abgerufen werden können.
  • Suche - (Wenn die Aktion ist query_themes). Ein Suchbegriff, mit dem das Repository durchsucht werden soll.
  • Felder - wieder ein Array mit einem wahr oder falsch Wert für jeden Schlüssel (Feld). Die enthaltenen Felder bilden die Eigenschaften des zurückgegebenen Objekts. Die möglichen Felder sind (Standardeinstellung ist) wahr, wenn nicht anders angegeben):
    • Ausführung - (neueste)
    • Autor
    • preview_url - URL zur gehosteten wp-themes.com-Vorschau
    • screenshot_url - URL zum Screenshotbild
    • screenshot_count* - Anzahl der Screenshots des Designs
    • Screenshots* - Array von Screenshot-URLs
    • bewertung - (in Prozent)
    • num_ratings - Anzahl der Bewertungen
    • heruntergeladen - Anzahl der Downloads
    • Abschnitte
    • Beschreibung
    • Download-Link

Andere Felder sind 'Name','Schnecke','Stichworte','Startseite','Mitwirkende', und 'letzte Aktualisierung'.

*Bitte beachten Sie, dass in Zukunft Themen [erlaubt sind, mehrere Screenshots] [1].

Beispiel

 // Setze die Argumente. Aus Gründen der Kürze des Codes werde ich die meisten Standardeinstellungen verwenden. $ Args = array ('slug' => 'Desk Mess Mirrored', 'fields' => array ('screenshot_url' => true)); // Erstellen Sie das Plug-in-Objekt "request" und extrahieren Sie das Objekt ',' request '=> serialize ((object) $ args)))); if (! is_wp_error ($ response)) $ theme = unserialize (wp_remote_retrieve_body ($ response)); if (! is_object ($ theme) &&! is_array ($ theme)) // Der Antworttext enthält kein Objekt / Array-Echo "Ein Fehler ist aufgetreten";  else // Daten desinfizieren: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ theme-> screenshot_url); $ rating = esc_attr ($ theme-> rating); // Anzeige der Bewertung des Designs, eines Screenshots und eines Links zur Vorschau des Designs Echo "Dieses Design hat eine Bewertung von $ rating%. Vorschau anzeigen"; Echo ""; else // Fehlerobjekt gab Echo zurück" Ein Fehler ist aufgetreten ";

In diesen Beispielen habe ich (zum größten Teil) die Standardfelder verwendet - aber um etwas Bandbreite zu sparen, sollten Sie explizit angeben, welche Felder Sie verwenden und welche nicht.


Caching

Dies ist ein hervorragendes Beispiel dafür, wo Caching, insbesondere Transienten, verwendet werden können (und sollten). Durch das Zwischenspeichern der Daten werden die Informationen nicht bei jedem Laden der Seite aus dem Repository abgerufen. Dies würde das Laden der Website verlangsamen. Ein einfaches Beispiel: Wenn ich das obige Beispiel ohne Zwischenspeicherung ausgeführt habe, dauerte es 0,522 Sekunden, um die Daten abzurufen (was durchaus beachtlich ist). Nachdem ich die Transienten gestartet hatte, fiel sie auf 0,001 Sekunden. Auf jeden Fall nicht brauchen Um diese Informationen bei jedem Laden der Seite zu erhalten, gibt es eigentlich keinen Grund, diese Daten mehr als einmal am Tag (oder vielleicht länger) zu aktualisieren..

Wenn Sie nicht sicher sind, wie Transienten verwendet werden sollen, können Sie sie in diesem Artikel nachlesen.

Lassen Sie uns Transienten in eine generische Funktion implementieren, die Informationen zu einem bestimmten Thema (und anderen Argumenten) abruft:

 / ** * Gibt ein Theme-Objekt mit einem Array $ args oder WP_Error-Objekt zurück, wenn ein Fehler auftritt. * $ Args sollte einen 'slug'-Schlüssel mit dem Namen des Themas enthalten. * / function sh_get_theme_information ($ args) // Setze das $ request Array $ request = array ('body' => array ('action' => 'theme_information', 'request' => serialize ((object) $ args) )); // Generiere einen Cache-Schlüssel, der die Antwort für diese Anfrage enthalten würde: $ key = 'sh_theme _'. Md5 (serialize ($ request)); // Transiente prüfen. Wenn es vorhanden ist, verwenden Sie das. Wenn nicht, rufen Sie das Thema erneut ab, wenn (false === ($ theme = get_transient ($ key))) // Thema nicht gefunden wird - wir müssen es erneut abrufen. http://api.wordpress.org/themes/info/1.0/ ',$request); if (is_wp_error ($ response)) $ response zurückgeben; $ theme = unserialize (wp_remote_retrieve_body ($ response)); if (! is_object ($ theme) &&! is_array ($ theme)) neuen WP_Error zurückgeben ('theme_api_error', 'Ein unerwarteter Fehler ist aufgetreten'); // Transient für das nächste Mal setzen… 24 Stunden lang halten, sollte gut sein set_transient ($ key, $ theme, 60 * 60 * 24);  return $ theme; 

So verwenden Sie diese Funktion:

 // Setze die Argumente. Aus Gründen der Kürze des Codes verwende ich (meistens) die Standardeinstellungen $ args = array ('slug' => 'Desk Mess Mirrored', 'fields' => array ('screenshot_url' => true)); // Holen Sie sich das Thema $ theme = sh_get_theme_information ($ args); // Themeninformationen anzeigen (oder Fehlermeldung). if (is_wp_error ($ theme)) echo 'Ein unerwarteter Fehler ist aufgetreten';  else // Daten desinfizieren: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ theme-> screenshot_url); $ rating = esc_attr ($ theme-> rating); // Anzeige von Themenbewertung, Screenshot und Vorschau-Link-Echo "Dieses Design hat eine Bewertung von $ rating%. Vorschau anzeigen"; Echo "";

Das Grundmuster für das Abrufen von Daten aus einer beliebigen API ist weitgehend gleich. Verwandeln Sie eine Anfrage in eine eindeutige Anforderung, mit der die Ergebnisse zwischengespeichert werden. Überprüfen Sie dann, ob Daten für den Schlüssel vorhanden sind. Wenn dies der Fall ist, können Sie diese Daten einfach zurückgeben. Ansonsten rufen Sie die Daten aus der Ferne ab. Wenn Sie die Antwort erhalten haben, prüfen Sie, ob Fehler vorliegen, und aktualisieren Sie den Transienten, und geben Sie die neu abgerufenen Daten zurück.

Als zweites Beispiel können wir eine Funktion erstellen, die ein Array von Plug-Ins von einem bestimmten Autor zurückgibt:

 Funktion sh_get_plugins_by_author ($ author = ") if (empty ($ author)) gibt false zurück; $ key = sanitize_key ('sh_plugins _'. $ author); if (false === ($ plugins = get_transient ($ key))) $ args = array ('author' => $ author, 'fields' => array ('downloads' => true, 'downloadlink' => true)); $ response = wp_remote_post ('http: //api.wordpress.) .org / plugins / info / 1.0 / ', array (' body '=> array (' action '=>' query_plugins ',' request '=> serialize ((object) $ args)))); $ plugin_response = unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ plugin_response-> plugins; // Transient für das nächste Mal setzen ... 24 Stunden beibehalten, sollte ein guter set_transient sein ($ key, $ plugins, 60 * 60 * 24); return $ plugins;

(Natürlich können Sie die WordPress-API immer in Verbindung mit verwenden.) weiche Zwischenspeicherung, worüber ich in diesem Artikel gesprochen habe).

Sie können eine Live-Demonstration der Verwendung der WordPress Repository-API auf der WordPress-Plug-In-Seite meiner Site sehen.