Samhandler med WordPress 'Plug-in og Theme API

API for WordPress Repository er API-en som brukes til å hente plugin-moduler og temainformasjon for bruk på adminssidene dine. For eksempel viser den de nyeste plugin-modulene på oversikten, lar deg vise temaer på temafanen din og lar deg søke etter og installere plugin-moduler rett fra depotet. I denne opplæringen skal vi se på hvordan denne API-en fungerer, og hvordan den kan brukes til å få tilgang til informasjon, for eksempel pluginens vurdering, hvor mange ganger den er lastet ned, eller til og med sine ReadMe-seksjoner. Ved hjelp av denne API-en kan du for eksempel være vert for en kobling på nettstedet ditt som alltid peker på den nyeste versjonen av plugin-modulen eller temaet ditt.

Når WordPress samler informasjon om plugin-moduler og temaer fra depotet, gjør den det ved å sende en forespørsel til en av to nettadresser.

  • For plugin-moduler: http://api.wordpress.org/plugins/info/1.0/
  • For temaer: http://api.wordpress.org/themes/info/1.0/

Forespørselen har form av en matrise med en 'handling'og'be om'-tasten.

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

Få detaljer om en plugin eller et tema

Når du henter data om et plugin eller tema,handling'bør settes til plugin_information eller theme_information henholdsvis. Verdien av forespørselsnøkkelen bør være et serialisert objekt med en slugegenskap (sluggen til temaet / plugin-modulen) og en feltegenskap, som angir hvilke data vi er ute etter (tilgjengelige felter er beskrevet nedenfor). I ovennevnte kutt, $ args bør være en assosiativ array med nøkler gitt av disse egenskapene.

Avkastningsverdien fra wp_remote_post, $ svar, kan være en WP_Query feil eller annet et ekte svar fra depotet som inneholder en feilmelding. Men hvis alt gikk bra, kan det returnerte plugin-modulen eller temaobjektet hentes ut av det med følgende:

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

Spør etter Plug-in og Theme Repositories

For å hente en liste over temaer / plugin-moduler som samsvarer med bestemte kriterier, bør handlingen settes til query_themes eller query_plugins. Dette bør ledsages av en passende nøkkel (for eksempel 'forfatter', for å få plugins / temaer av en bestemt forfatter) i $ args array. De mulige kriteriene er gitt nedenfor.

Igjen (forutsatt at det ikke har oppstått noen feil), bør rekke matchende plugin-moduler gis av:

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

og lignende, for temaer:

 $ returned_object = maybe_unserialize (wp_remote_retrieve_body ($ respons)); $ temaer = $ return_object-> temaer;

Hvert tema / plugin-objekt i gruppen har de samme egenskapene som de som er bestemt av feltnøkkelen i $ args array. De tilgjengelige feltene er oppført nedenfor, så vel som standardfeltene (for *_informasjon spørringer). Vær oppmerksom på at standardverdiene er forskjellige for ulike handlinger.


Plug-in egenskaper

Som nevnt ovenfor $ args er en assosiativ array som kan inneholde følgende felt:

  • slug - (Når handlingen er plugin_information). Sluggen i plugin-modulen for å returnere dataene til.
  • bla - (Når handlingen er query_plugins). Tar verdiene kjennetegnet, populær eller ny.
  • forfatter - (Når handlingen er query_plugins). Forfatterens WordPress brukernavn, for å hente plugins av en bestemt forfatter.
  • stikkord - (Når handlingen er query_plugins). Merk med å hente plugins for.
  • Søke - (Når handlingen er query_plugins). Et søkeord, for å søke i depotet.
  • Enger - en rekke med mulige felt (oppført nedenfor) som nøkler og ekte eller falsk verdi for å returnere data for det feltet eller ikke. Feltene som er inkludert, utgjør egenskapene til det returnerte objektet ovenfor. De mulige feltene er (standard satt til ekte, med mindre annet er angitt):
    • versjon - siste
    • forfatter - forfatternavn og lenke til profil
    • krever - den minste WordPress-versjonen kreves
    • testet - den nyeste WordPress-versjonen testet
    • kompatibilitet - en matrise som inneholder en matrise for hver versjon av plugin-modulen din. Denne gruppen lagrer antall stemmer, antall stemmer, og antall i prosent.
    • lastet ned - Antall nedlastinger
    • vurdering - i prosent
    • NUM_RATINGS - antall rangeringer
    • seksjoner - Dette er en matrise med HTML for hver seksjon på WordPress-plugin-siden som verdier, nøkler kan inneholde 'beskrivelse','installasjon','skjermbilder','changelog'og'FAQ'.
    • DOWNLOAD_LINK - peker på depotets vert ZIP-fil av pluginens nyeste versjon
    • beskrivelse - (misligholde falsk)
    • Kort beskrivelse - (misligholde falsk)

Andre felt inkluderer 'Navn','slug','author_profile','tags','hjemmeside','bidragsytere','la til'og'sist oppdatert'.

Eksempel

Som et kort eksempel, la oss vise en liste over programtillegg av en bestemt forfatter, sammen med hvor mange ganger de har blitt lastet ned:

 // Angi argumentene. For kortfattet kode vil jeg bare sette inn noen få felt. $ args = array ('author' => 'stephenh1988', 'fields' => array ('lastet ned' => sant, 'downloadlink' => true)); // Forespørsel og pakk plugin-objektet. Handlingen er query_plugins $ response = wp_remote_post ('http://api.wordpress.org/plugins/info/1.0/', array ('body' => array ('action' => 'query_plugins', 'request' => serialiser ((objekt) $ args)))); hvis (! er_wp_error ($ respons)) $ returned_object = unserialize (wp_remote_retrieve_body ($ response)); $ plugins = $ returned_object-> plugins; hvis (! is_array ($ plugins)) // Response body inneholder ikke et objekt / array echo "En feil har oppstått";  else // Vis en liste over programtilleggene og antall nedlastinger hvis ($ plugins) echo '
    '; foreach ($ plugins som $ plugin) echo "
  • ".Esc_html ($ plugin-> navn)." (lastet ned ".esc_html ($ plugin-> downloaded)." ganger)
  • "; else // Feilobjekt returnerte ekko" En feil har oppstått ";

Temaegenskaper

Temas API-forespørselen er veldig lik, selv om det er litt forskjellige felt tilgjengelig.

  • slug - (Når handlingen er theme_information) Slug av temaet for å returnere dataene til.
  • bla - (Når handlingen er query_themes). Tar verdiene kjennetegnet, ny eller oppdatert.
  • forfatter - (Når handlingen er query_themes). Forfatterens brukernavn, for å hente temaer av en bestemt forfatter.
  • stikkord - (Når handlingen er query_themes). Et utvalg av koder som du kan hente temaer for.
  • Søke - (Når handlingen er query_themes). Et søkeord, for å søke i depotet.
  • Enger - igjen en matrise med a ekte eller falsk verdi for hver tast (felt). Feltene som er inkludert, utgjør egenskapene til det returnerte objektet ovenfor. De mulige feltene er (standard satt til ekte, med mindre annet er angitt):
    • versjon - (siste)
    • forfatter
    • preview_url - URL til wp-themes.com vert forhåndsvisning
    • screenshot_url - URL til skjermbilde
    • screenshot_count* - Antall skjermbilder temaet har
    • skjermbilder* - utvalg av skjermdump-nettadresser
    • vurdering - (i prosent)
    • NUM_RATINGS - antall rangeringer
    • lastet ned - antall nedlastinger
    • seksjoner
    • beskrivelse
    • DOWNLOAD_LINK

Andre felt inkluderer 'Navn','slug','tags','hjemmeside','bidragsytere'og'sist oppdatert'.

*Vær oppmerksom på at i fremtiden vil temaene være [tillat flere skjermbilder] [1].

Eksempel

 // Angi argumentene. For kortfattet kode vil jeg bruke de fleste standardene $ args = array ('slug' => 'Desk Mess Mirrored', 'fields' => array ('screenshot_url' => true)); // Forespørsel og utdrag plugin-objekt $ response = wp_remote_post ('http://api.wordpress.org/themes/info/1.0/', array ('body' => array ('action' => 'tema_informasjon ',' request '=> serialize ((objekt) $ args)))); hvis (! is_wp_error ($ response)) $ theme = unserialize (wp_remote_retrieve_body ($ respons)); hvis (! er_objekt ($ tema) &&! is_array ($ tema)) // Response body inneholder ikke et objekt / array echo "Det har oppstått en feil";  ellers // Sanitize data: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ theme-> screenshot_url); $ rating = esc_attr ($ theme-> rating); // Vis vurdering av temaet, et skjermbilde og lenke til forhåndsvisning av tema ekko "Dette temaet har en vurdering av $ rating%. Se en forhåndsvisning"; ekko ""; annet // Feilobjekt returnerte ekko" En feil har oppstått ";

I disse eksemplene har jeg brukt (for det meste) standardfeltene - men i et forsøk på å lagre den lille båndbredden, bør du spesifikt angi hvilke felt du gjør, og ikke vil.


caching

Dette er et utmerket eksempel på hvor caching, spesielt transienter, kan (og skal) brukes. Caching data betyr at vi ikke henter informasjonen fra depotet på hver sidebelastning - noe som vil bremse nettstedbelastningen. Som et enkelt eksempel, da jeg kjørte eksemplet ovenfor uten caching, tok det 0,522 sekunder å hente dataene (som er respektabelt). Når jeg begynte å bruke transienter, falt den til 0,001 sekunder. I alle fall gjør vi det ikke trenge for å få denne informasjonen på hver sidelast - faktisk er det liten grunn til å oppdatere disse dataene mer enn en gang om dagen (eller kanskje lengre).

Hvis du ikke er sikker på hvordan du bruker transienter, kan du lese på dem i denne artikkelen.

La oss implementere transienter i en generell funksjon som henter temainformasjon, gitt et bestemt tema (og andre argumenter):

 / ** * Returnerer et temaobjekt gitt et array $ args eller WP_Error-objekt hvis det er en feil * $ args skal inneholde en "slug" -tast med temaets navn * og "felt" -tasten som inneholder en rekke felt for å hente. * / funksjon sh_get_theme_information ($ args) // Still inn $ request array $ request = array ('body' => array ('action' => 'tema_informasjon', 'request' => serialize ((object) $ args) )); // Generer en cache-nøkkel som vil holde svaret for denne forespørselen: $ key = 'sh_theme _'. Md5 (serialize ($ request)); // Sjekk forbigående. Hvis det er der - bruk det, hvis ikke hente temaet hvis (false === ($ theme = get_transient ($ key))) // Tema ikke funnet - vi må hente det $ response = wp_remote_post (' http://api.wordpress.org/themes/info/1.0/',$request); hvis (is_wp_error ($ response)) returnerer $ response; $ theme = unserialize (wp_remote_retrieve_body ($ response)); Hvis (! er_objekt ($ tema) &&! is_array ($ tema)) returner nytt WP_Error ('theme_api_error', 'Det oppstod en uventet feil'); // Sett forbigående for neste gang ... hold det i 24 timer, bør være bra set_transient ($ key, $ theme, 60 * 60 * 24);  returner $ tema; 

For å bruke denne funksjonen:

 // Angi argumentene. For kortfattet kode vil jeg bare bruke (for det meste) standardene $ args = array ('slug' => 'Desk Mess Mirrored', 'fields' => array ('screenshot_url' => true)); // Få temaet $ theme = sh_get_theme_information ($ args); // Vis temainformasjon (eller feilmelding). hvis (is_wp_error ($ tema)) echo 'En uventet feil har oppstått';  ellers // Sanitize data: $ preview_url = esc_url ($ theme-> preview_url); $ screenshot_url = esc_attr ($ theme-> screenshot_url); $ rating = esc_attr ($ theme-> rating); // Vis tema vurdering, skjermbilde og forhåndsvisning link echo "Dette temaet har en vurdering av $ rating%. Se en forhåndsvisning"; ekko "";

Det grunnleggende mønsteret for å hente data fra en hvilken som helst API er stort sett den samme. Slå en forespørsel til en unik, for å cache resultatene. Sjekk deretter om data eksisterer for nøkkelen, hvis det gjør det - bra, vi kan bare returnere dataene. Ellers henter dataene eksternt. Når du har mottatt svaret, må du sjekke om det er feil, og hvis det ikke er noen oppdatering, forbigående og returnere de nylig hentede dataene.

Som et andre eksempel kan vi konstruere en funksjon som returnerer en rekke plugin-moduler av en bestemt forfatter:

 funksjon sh_get_plugins_by_author ($ author = ") hvis (tom ($ forfatter)) return false; $ key = sanitize_key ('sh_plugins _'. $ forfatter); hvis (false === ($ plugins = get_transient ($ key))) $ args = array ('author' => $ author, 'fields' => array ('lastet' => sant, '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; // Sett forbigående for neste gang ... hold det i 24 timer skal være bra set_transient ($ key, $ plugins, 60 * 60 * 24); returnere $ plugins;

(Selvfølgelig kan du alltid bruke WordPress API sammen med myk caching, som jeg snakket om i denne artikkelen).

Du kan se en live demonstrasjon av å bruke WordPress Repository API på nettstedet mitt på WordPress plugin-moduler.