Interacționează cu API-ul Plug-in și Tema WordPress

API-ul WordPress Repository este API-ul folosit pentru a prelua informații despre plugin și teme pentru a fi utilizate în paginile de admin. De exemplu, acesta afișează cele mai recente plug-in-uri pe tabloul de bord, vă permite să vizualizați teme pe fila temă și vă permite să căutați și să instalați pluginuri direct din depozit. În acest tutorial vom analiza modul în care funcționează acest API și modul în care acesta poate fi utilizat pentru a accesa informații cum ar fi evaluarea plug-in-ului dvs., de câte ori a fost descărcat sau chiar secțiunile ReadMe. Folosind acest API, de exemplu, puteți găzdui un link pe site-ul dvs., care va indica întotdeauna cea mai recentă versiune a plug-in-ului sau a temei.

Când WordPress colectează informații despre plug-in-uri și teme din repozitoriu, face acest lucru prin trimiterea unei solicitări către unul din cele două adrese URL.

  • Pentru plug-in-uri: http://api.wordpress.org/plugins/info/1.0/
  • Pentru teme: http://api.wordpress.org/themes/info/1.0/

Cererea ia forma unei matrice cu un "acțiune' și 'cererecheie.

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

Obținerea detaliilor despre un plug-in sau o temă

Când preluați date despre un plugin sau o temă,acțiune"ar trebui să fie setat la plugin_information sau theme_information respectiv. Valoarea cheii de solicitare ar trebui să fie un obiect serializat, cu o proprietate slug (sloganul temei / plug-in-ului) și o proprietate a câmpului, care indică ce date suntem noi (câmpurile disponibile sunt detaliate mai jos). În fragmentul de mai sus, $ args ar trebui să fie o matrice asociativă cu chei date de acele proprietăți.

Valoarea returnată de la wp_remote_post, răspuns $, poate un WP_Query eroare sau altceva un răspuns autentic din depozit care conține un mesaj de eroare. Dar dacă totul a mers bine, atunci obiectul returnat sau obiectul tematic poate fi extras din el cu următoarele:

 $ return_object = maybe_unserialize (wp_remote_retrieve_body ($ răspuns));

Interogarea depozitelor de plugin-uri și a temelor

Pentru a prelua o listă de teme / plug-in-uri care corespund anumitor criterii, acțiunea ar trebui să fie setată la query_themes sau query_plugins. Aceasta ar trebui să fie însoțită de o cheie adecvată (de exemplu,autor", pentru a obține pluginuri / teme de către un anumit autor) în $ args matrice. Criteriile posibile sunt prezentate mai jos.

Din nou (presupunând că nu s-au produs erori), matricea de plugin-uri potrivite ar trebui să fie dată de:

 $ return_object = maybe_unserialize (wp_remote_retrieve_body ($ răspuns)); $ plugins = $ return_object-> pluginuri;

și, în mod similar, pentru teme:

 $ return_object = maybe_unserialize (wp_remote_retrieve_body ($ răspuns)); $ themes = $ return_object-> teme;

Fiecare obiect temă / plugin din matrice are aceleași proprietăți ca și cele determinate de cheia de câmpuri din $ args matrice. Câmpurile disponibile sunt enumerate mai jos, precum și câmpurile implicite (pentru *_informație întrebări). Rețineți că valorile implicite sunt diferite pentru diferite acțiuni.


Plug-in Properties

Așa cum sa arătat mai sus $ args este o matrice asociativă care poate conține următoarele câmpuri:

  • melc - (Când acțiunea este plugin_information). Blocul plug-in-ului pentru a returna datele pentru.
  • naviga - (Când acțiunea este query_plugins). Își ia valorile Recomandate, popular sau nou.
  • autor - (Când acțiunea este query_plugins). Numele de utilizator al WordPress al autorului, pentru a prelua pluginurile de la un anumit autor.
  • etichetă - (Când acțiunea este query_plugins). Etichetă cu care să se recupereze pluginurile.
  • căutare - (Când acțiunea este query_plugins). Un termen de căutare, cu care să se caute în depozit.
  • câmpuri - o matrice cu câmpuri posibile (enumerate mai jos) sub formă de chei și Adevărat sau fals valoare pentru a returna datele pentru acel câmp sau nu. Câmpurile care sunt incluse alcătuiesc proprietățile obiectului returnat de mai sus. Câmpurile posibile sunt (setate implicit la Adevărat, dacă nu se specifică altfel):
    • versiune - cele mai recente
    • autor - numele autorului și linkul la profil
    • necesită - versiunea minimă WordPress necesară
    • testat - ultima versiune WordPress testată
    • compatibilitate - o matrice care conține o matrice pentru fiecare versiune a plug-in-ului. Această matrice stochează numărul de voturi, numărul de voturi "lucrări" și acest număr ca procent.
    • descărcat - numărul de descărcări
    • evaluare - ca procent
    • NUM_RATINGS - numărul de evaluări
    • secțiuni - aceasta este o matrice cu codul HTML pentru fiecare secțiune din pagina plug-in WordPress ca valori, cheile pot include "Descriere","instalare","capturi de ecran","changelog' și 'FAQ'.
    • DOWNLOAD_LINK - indică la fișierul de depozit găzduit fișierul ZIP al versiunii ultime a pluginului
    • Descriere - (Mod implicit fals)
    • scurta descriere - (Mod implicit fals)

Alte domenii includ "Nume","melc","author_profile","Etichete","pagina principala","contribuitori","adăugat' și 'Ultima actualizare'.

Exemplu

Ca un scurt exemplu, să afișăm o listă de plug-in-uri de către un anumit autor împreună cu numărul de descărcări:

 // Setați argumentele. Pentru coerența codului, voi pune doar câteva câmpuri. $ args = array ('author' => 'stephenh1988', 'fields' => array ('descărcat' => true, 'downloadlink' => true)); // Cereți și extrageți obiectul plug-in. Acțiunea este query_plugins $ response = wp_remote_post ('http://api.wordpress.org/plugins/info/1.0/', array ('body' => array ('action' => 'query_plugins' serializează ((obiect) $ args)))); dacă (! is_wp_error ($ răspuns)) $ return_object = unserialize (wp_remote_retrieve_body ($ răspuns)); $ plugins = $ return_object-> pluginuri; if (! is_array ($ plugins)) // Corpul de răspuns nu conține un ecou de obiect / array "A apărut o eroare";  altceva // Afișați o listă a plug-in-urilor și numărul de descărcări dacă ($ plugins) echo '
    „; foreach ($ plugins ca $ plugin) ecou "
  • ".Esc_html ($ plugin-> nume)." (descărcat ".esc_html ($ plugin-> descărcat)." ori)
  • "; altceva // Obiect de eroare returnat ecou" A apărut o eroare ";

Tematica Proprietăți

Solicitarea API a temelor este foarte asemănătoare, deși există câmpuri ușor diferite.

  • melc - (Când acțiunea este theme_information) Glasul temei pentru a returna datele pentru.
  • naviga - (Când acțiunea este query_themes). Își ia valorile Recomandate, nou sau la curent.
  • autor - (Când acțiunea este query_themes). Numele de utilizator al autorului, pentru a prelua teme de la un anumit autor.
  • etichetă - (Când acțiunea este query_themes). O serie de etichete cu care să se recupereze teme.
  • căutare - (Când acțiunea este query_themes). Un termen de căutare, cu care să se caute în depozit.
  • câmpuri - din nou o matrice cu a Adevărat sau fals pentru fiecare cheie (câmp). Câmpurile care sunt incluse alcătuiesc proprietățile obiectului returnat de mai sus. Câmpurile posibile sunt (setate implicit la Adevărat, dacă nu se specifică altfel):
    • versiune - (cele mai recente)
    • autor
    • PREVIEW_URL - URL la wp-themes.com gazduit preview
    • screenshot_url - Adresa URL pentru imaginea de pe ecran
    • screenshot_count* - numărul de capturi de ecran pe care le are tema
    • capturi de ecran* - o serie de adrese URL de screenshot
    • evaluare - (în procente)
    • NUM_RATINGS - numărul de evaluări
    • descărcat - numărul de descărcări
    • secțiuni
    • Descriere
    • DOWNLOAD_LINK

Alte domenii includ "Nume","melc","Etichete","pagina principala","contribuitori', și 'Ultima actualizare'.

*Rețineți că, în viitor, temele vor fi [permise mai multe capturi de ecran] [1].

Exemplu

 // Setați argumentele. Pentru consistența codului, voi folosi majoritatea valorilor implicite $ args = array ('slug' => 'Desk Mess Mirrored', 'fields' => array ('screenshot_url' => true)); // Efectuați cererea și extrageți obiectul plug-in $ response = wp_remote_post ('http://api.wordpress.org/themes/info/1.0/', array ('body' => array ('action' => 'theme_information ',' request '=> serialize ((obiect) $ args)))); dacă (! is_wp_error ($ response)) $ theme = unserialize (wp_remote_retrieve_body ($ răspuns)); if (! is_object ($ theme) &&! is_array ($ theme)) // Corpul de răspuns nu conține un ecou de obiect / array "A apărut o eroare";  altfel // Sanitizează datele: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ temă-> screenshot_url); $ rating = esc_attr ($ temă-> evaluare); // Afișează evaluarea temei, o captură de ecran și link-ul la previzualizarea temei ecou "Această temă are un rating de $ rating%. Vizualizați o previzualizare"; ecou ""; altceva // Obiect de eroare returnat ecou" A apărut o eroare ";

În aceste exemple, am folosit (în cea mai mare parte) câmpurile implicite - dar în încercarea de a salva acel bit de lățime de bandă, ar trebui să precizați explicit câmpurile pe care le faceți și nu doriți.


Caching

Acesta este un exemplu excelent în cazul în care caching-ul, în special tranzitorii, poate (și ar trebui) să fie utilizat. Caching-ul datelor înseamnă că nu vom prelua informațiile din depozit la încărcarea fiecărei pagini - ceea ce ar încetini încărcarea site-ului. Ca un exemplu simplu, când am rulat exemplul de mai sus fără caching, a fost nevoie de 0,522 secunde pentru a prelua datele (ceea ce este respectabil). Odată ce am început să folosesc tranziții, a scăzut la 0,001 secunde. În orice caz nu o facem nevoie pentru a obține aceste informații la încărcarea fiecărei pagini - de fapt, există puține motive să actualizați aceste date mai mult de o dată pe zi (sau poate mai mult).

Dacă nu sunteți sigur cum să utilizați tranziții, puteți să le citiți în acest articol.

Să implementăm tranzițiile într-o funcție generică care va prelua informații despre temă, dat fiind o temă specifică (și alte argumente):

 / ** * Returneaza un obiect tematic dat intr-un array $ args sau WP_Error obiect daca exista o eroare * $ args ar trebui sa contina o cheie 'slug' cu numele temei * si 'field' cheia care detine un array de campuri pentru a fi preluat. * / funcția sh_get_theme_information ($ args) // Setați $ request array $ request = array ('corp' => array ('action' => 'theme_information' )); // Generați o cheie de arhivă care să dețină răspunsul pentru această solicitare: $ key = 'sh_theme _'. Md5 (serialize ($ request)); // Verificați tranzitorii. Dacă este acolo - utilizați acest lucru, dacă nu refuzați tema dacă false === ($ theme = get_transient ($ key))) // Tema nu a fost găsită - trebuie să o reîncărcați $ response = wp_remote_post (' http://api.wordpress.org/themes/info/1.0/',$request); dacă (is_wp_error ($ response)) returnează răspunsul $; $ theme = neserializare (wp_remote_retrieve_body ($ răspuns)); dacă (! is_object ($ theme) &&! is_array ($ theme)) returnează un nou WP_Error ('theme_api_error', 'A apărut o eroare neașteptată'); // Setați tranziția pentru data viitoare ... păstrați-o timp de 24 de ore ar trebui să fie bine set_transient ($ key, $ theme, 60 * 60 * 24);  returnați tema $; 

Pentru a utiliza această funcție:

 // Setați argumentele. Pentru consistența codului, voi folosi doar (mai ales) valorile implicite $ args = array ('slug' => 'Desk Mess Mirrored', 'fields' => array ('screenshot_url' => true)); // Obțineți tema $ theme = sh_get_theme_information ($ args); // Afișați informații despre temă (sau mesaj de eroare). if (is_wp_error ($ theme)) echo 'A apărut o eroare neașteptată';  altfel // Sanitizează datele: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ temă-> screenshot_url); $ rating = esc_attr ($ temă-> evaluare); // Afișați evaluarea temei, imaginea de ecran și linkul de previzualizare echo "Această temă are un rating de $ rating%. Vizualizați o previzualizare"; ecou "";

Modelul de bază pentru extragerea datelor din orice API este în general același. Transformați o solicitare într-o aplicație unică, cu care să stocați rezultatele cache. Apoi, verificați dacă există date pentru cheia, dacă aceasta este bună, putem returna datele respective. În caz contrar, preluați datele de la distanță. Odată ce ați primit răspunsul, verificați erorile și, dacă nu există nici o actualizare, temporară și returnați datele nou preluate.

Ca un al doilea exemplu, putem construi o funcție care returnează o serie de plug-in-uri de către un anumit autor:

 funcția sh_get_plugins_by_author ($ author = ") if (empty ($ author)) return false; $ key = sanitize_key ('sh_plugins _'. $ args = array ('author' => $ autor, 'fields' => array ('downloaded' => 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 = ($ key, $ plugins, 60 * 60 * 24); întoarceți-l pentru 24 de ore ar trebui să fie bine set_transient ($ key, $ plugins, 60 * 60 * 24) $ plugins;

(Desigur, puteți utiliza întotdeauna API-ul WordPress împreună cu cache moale, despre care am vorbit în acest articol).

Puteți vedea o demonstrație live cu privire la utilizarea API-ului WordPress Repository pe pagina de plugin-uri WordPress a site-ului meu.

Cod