Samverkar med WordPress 'Plug-in & Theme API

API: n WordPress Repository är API: n som används för att hämta plugin-och temainformation för användning på dina administratorsidor. Det visar till exempel de senaste plugin-programmen på instrumentpanelen, så att du kan visa teman på tematiketten och låter dig söka efter och installera plug-ins direkt från förvaret. I den här handledningen ska vi titta på hur detta API fungerar och hur det kan användas för att få åtkomst till information som din plugin-rating, hur många gånger den har laddats ner eller till och med dess ReadMe-sektioner. Med hjälp av detta API kan du till exempel vara värd för en länk på din webbplats som alltid pekar på den senaste versionen av din plugin eller det här temat.

När WordPress samlar information om plugin-program och teman från förvaret gör den det genom att skicka en begäran till en av två webbadresser.

  • För plugin-program: http://api.wordpress.org/plugins/info/1.0/
  • För teman: http://api.wordpress.org/themes/info/1.0/

Förfrågan har formen av en matris med en "verkan"och"begäran'nyckeln.

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

Få detaljer om en plugin eller tema

När du hämtar data om ett plugin eller tema,verkan"bör ställas in på plugin_information eller theme_information respektive. Värdet på förfrågningsnyckeln bör vara ett seriellt objekt med en slugegenskap (sluggen i temat / plugin-modulen) och en fältegenskap som anger vilka data vi är efter (de tillgängliga fälten beskrivs nedan). I ovanstående kod, $ args bör vara en associativ grupp med nycklar som ges av dessa egenskaper.

Returvärdet från wp_remote_post, $ svar, kanske en WP_Query fel eller ett genuint svar från förvaret som innehåller ett felmeddelande. Men om allt gick bra, kan det returnerade plugin-programmet eller tematobjektet extraheras från det med följande:

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

Fråga Plug-in & Theme Repositories

För att hämta en lista över teman / plugin-program som matchar vissa kriterier, bör åtgärden sättas till query_themes eller query_plugins. Detta bör åtföljas av en lämplig nyckel (t.ex. "författare', för att få plugin / teman av en viss författare) i $ args array. De möjliga kriterierna ges nedan.

Återigen (om inget fel har inträffat), bör matrisen av matchande plugin-program ges av:

 $ returned_object = maybe_unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ returned_object-> plugins;

och liknande för teman:

 $ returned_object = maybe_unserialize (wp_remote_retrieve_body ($ response)); $ teman = $ return_object-> teman;

Varje tema / pluginobjekt i arrayen har samma egenskaper som de som bestäms av fältnyckeln i $ args array. De tillgängliga fälten anges nedan, liksom standardfälten (för *_information sökfrågor). Observera att standardvärdena är olika för olika åtgärder.


Plug-in Egenskaper

Som noterat ovan $ args är en associativ grupp som kan innehålla följande fält:

  • snigel - (När åtgärden är plugin_information). Sluggen i plugin-modulen för att returnera data för.
  • bläddra - (När åtgärden är query_plugins). Tar värdena skiss, populär eller ny.
  • författare - (När åtgärden är query_plugins). Författarens WordPress användarnamn, för att hämta plugins av en viss författare.
  • märka - (När åtgärden är query_plugins). Tagg med vilken för att hämta plugins för.
  • Sök - (När åtgärden är query_plugins). En sökterm, för att söka i förvaret.
  • fält - en array med möjliga fält (listade nedan) som nycklar och Sann eller falsk värde för att returnera data för det fältet eller inte. Fälten som ingår ingår i egenskaperna hos det returnerade objektet ovan. De möjliga fälten är (standardinställd till Sann, om inget annat anges):
    • version - senast
    • författare - författarnamn och länk till profil
    • kräver - den minsta WordPress-versionen krävs
    • testade - den senaste WordPress-versionen testades
    • kompatibilitet - en array som innehåller en array för varje version av din plugin. Denna grupp lagrar antalet röster, antalet "arbetstolkar" och detta antal i procent.
    • hämtat - Antalet nedladdningar
    • betyg - i procent
    • NUM_RATINGS - antal betyg
    • sektioner - Detta är en matris med HTML för varje avsnitt på WordPress-plugin-sidan som värden, nycklar kan innehålla "beskrivning','installation','skärmbilder','changelog"och"faq'.
    • nedladdningslänk - pekar på depot värddat ZIP-fil i pluginens senaste version
    • beskrivning - (standard falsk)
    • kort beskrivning - (standard falsk)

Andra områden inkluderar "namn','snigel','author_profile','taggar','hemsida','bidrags','Lagt till"och"senast uppdaterad'.

Exempel

Som ett kort exempel, låt oss visa en lista med plugin-program av en viss författare, tillsammans med hur många gånger de har hämtats:

 // Ställ in argumenten. För kortfattad kod anger jag bara några få fält. $ args = array ('author' => 'stephenh1988', 'fält' => array ('downloaded' => true, 'downloadlink' => true)); // Gör förfrågan och extrahera plug-in objekt. Åtgärd är query_plugins $ response = wp_remote_post ('http://api.wordpress.org/plugins/info/1.0/', array ('body' => array ('action' => 'query_plugins', 'request' => serialisera ((objekt) $ args)))); om (! is_wp_error ($ response)) $ returned_object = unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ returned_object-> plugins; om (! is_array ($ plugins)) // Response Body innehåller inte ett objekt / array echo "Ett fel har inträffat";  else // Visa en lista med pluginprogrammen och antalet nedladdningar om ($ plugins) echo '
    '; foreach ($ plugins som $ plugin) echo "
  • ".Esc_html ($ plugin-> namn)." (nedladdad ".esc_html ($ plugin-> downloaded)." gånger)
  • "; else // Felobjekt returnerade echo" Ett fel har inträffat ";

Temaegenskaper

Teman API-förfrågan är mycket lika, även om det finns något olika fält tillgängliga.

  • snigel - (När åtgärden är theme_information) Sluget av temat för att returnera data för.
  • bläddra - (När åtgärden är query_themes). Tar värdena skiss, ny eller uppdaterad.
  • författare - (När åtgärden är query_themes). Författarens användarnamn, för att hämta teman av en viss författare.
  • märka - (När åtgärden är query_themes). En rad etiketter som du kan hämta teman för.
  • Sök - (När åtgärden är query_themes). En sökterm, för att söka i förvaret.
  • fält - igen en matris med a Sann eller falsk värde för varje nyckel (fält). Fälten som ingår ingår i egenskaperna hos det returnerade objektet ovan. De möjliga fälten är (standardinställd till Sann, om inget annat anges):
    • version - (senast)
    • författare
    • preview_url - URL till wp-themes.com värd förhandsvisning
    • screenshot_url - URL till skärmdumps bild
    • screenshot_count* - Antal skärmdumpar som temat har
    • skärmbilder* - En rad skärmdumpsadresser
    • betyg - (i procent)
    • NUM_RATINGS - antal betyg
    • hämtat - Antal nedladdningar
    • sektioner
    • beskrivning
    • nedladdningslänk

Andra områden inkluderar "namn','snigel','taggar','hemsida','bidrags'och'senast uppdaterad'.

*Observera att i framtiden kommer teman att [tillåtas flera skärmdumpar] [1].

Exempel

 // Ställ in argumenten. För kortfattad kod använder jag de flesta standardvärdena $ args = array ('slug' => 'Desk Mess Mirrored', 'fields' => array ('screenshot_url' => true)); // Gör förfrågan och extrahera plug-in objekt $ response = wp_remote_post ('http://api.wordpress.org/themes/info/1.0/', array ('body' => array ('action' => 'temainformation ',' request '=> serialize ((objekt) $ args)))); om (! is_wp_error ($ response)) $ theme = unserialize (wp_remote_retrieve_body ($ response)); om (! är_objekt ($ tema) &&! is_array ($ tema)) // Svarskroppen innehåller inte ett objekt / array echo "Ett fel har inträffat";  else // Sanitize data: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ theme-> screenshot_url); $ rating = esc_attr ($ theme-> rating); // Visa tematets betyg, en skärmdump och länk till förhandsvisningen av temakoncho "Det här temat har ett betyg på $ rating%. Visa en förhandsgranskning"; eko ""; else // Felobjekt returnerade echo" Ett fel har inträffat ";

I dessa exempel har jag (för det mesta) använt standardfälten - men i ett försök att spara den lite bandbredd bör du uttryckligen ange vilka fält du gör och vill inte.


caching

Detta är ett utmärkt exempel på var cachning, specifikt transienter, kan (och borde) användas. Cachning av data betyder att vi inte hämtar informationen från förvaret på varje sidlastning - vilket skulle sakta ner platsbelastningen. Som ett enkelt exempel, när jag sprang exemplet ovan utan cache tog det 0,522 sekunder att hämta data (vilket är respektabelt). När jag började använda transienter, föll den till 0,001 sekunder. I alla fall gör vi det inte behöver för att få denna information på varje sidlastning - det finns faktiskt liten anledning att uppdatera dessa data mer än en gång om dagen (eller kanske längre).

Om du inte är säker på hur du använder transienter kan du läsa igenom dem i den här artikeln.

Låt oss implementera transienter i en generisk funktion som hämtar temainformation, med tanke på ett specifikt tema (och andra argument):

 / ** * Returnerar ett temaobjekt med ett array $ args eller WP_Error-objekt om det finns ett fel * $ args ska innehålla en "slug" -tangent med temat namn * och "fält" -tangenten som innehåller en rad fält som ska hämtas. * / funktion sh_get_theme_information ($ args) // Ange $ request array $ request = array ('body' => array ('action' => 'theme_information', 'request' => serialize ((object) $ args) )); // Skapa en cache-nyckel som skulle innehålla svaret för denna förfrågan: $ key = 'sh_theme _'. Md5 (serialize ($ request)); // Kontrollera övergående. Om det är där - använd det om du inte hämtar temat om (false === ($ theme = get_transient ($ key))) // Tema inte hittat - vi måste hämta det $ response = wp_remote_post (' http://api.wordpress.org/themes/info/1.0/',$request); om (is_wp_error ($ response)) returnera $ response; $ theme = unserialize (wp_remote_retrieve_body ($ response)); Om (! is_object ($ theme) &&! is_array ($ theme)) returnera ny WP_Error ('theme_api_error', 'Ett oväntat fel har inträffat'); // Ange övergående för nästa gång ... behåll den i 24 timmar ska vara bra set_transient ($ key, $ theme, 60 * 60 * 24);  returnera $ temat; 

För att använda denna funktion:

 // Ställ in argumenten. För kortfattad kod använder jag (oftast) standardvärdena $ args = array ('slug' => 'Desk Mess Mirrored', 'fields' => array ('screenshot_url' => true)); // Hämta temat $ theme = sh_get_theme_information ($ args); // Visa temainformation (eller felmeddelande). om (is_wp_error ($ theme)) echo 'Ett oväntat fel har inträffat';  else // Sanitize data: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ theme-> screenshot_url); $ rating = esc_attr ($ theme-> rating); // Visa tema rating, skärmdump och förhandsgransknings länk echo "Det här temat har ett betyg på $ rating%. Visa en förhandsgranskning"; eko "";

Det grundläggande mönstret för att hämta data från något API är i stort sett detsamma. Vänd en förfrågan till en unik, med vilken att cache resultaten. Kontrollera sedan om data finns för nyckeln, om det gör det - bra, vi kan bara returnera den data. Annars hämta data på distans. När du har fått svaret, kolla efter fel, och om det inte finns någon uppdatering övergår det och överför den nyligen hämtade data.

Som ett andra exempel kan vi konstruera en funktion som returnerar en rad plugin-program av en viss författare:

 Funktionen sh_get_plugins_by_author ($ author = ") if (tom ($ author) returnerar false; $ key = sanitize_key ('sh_plugins _'. $ author); om (false === ($ plugins = get_transient ($ key))) $ args = array ('author' => $ author, 'fields' => array ('nedladdad' => true, 'downloadlink' => true)); $ response = wp_remote_post ('http: //api.wordpress .org / plugins / info / 1.0 / ', array (' body '=> array (' action '=>' query_plugins ',' request '=> serialize ((objekt) $ args))); $ plugin_response = unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ plugin_response-> plugins; // Ange övergående för nästa gång ... hålla det i 24 timmar ska vara bra set_transient ($ key, $ plugins, 60 * 60 * 24); returnera $ plugins;

(Naturligtvis kan du alltid använda WordPress API tillsammans med mjuk caching, som jag pratade om i den här artikeln).

Du kan se en live demonstration av att använda WordPress Repository API på min webbplatss WordPress-plugin-sida.