En titt på WordPress HTTP API Et praktisk eksempel på wp_remote_post

I den forrige artikkelen har vi gjennomgått de forrige artiklene om GET-forespørsler, de innfødte PHP-fasilitetene for å stille forespørsler og gjennomgått WordPress wp_remote_post API-funksjonen sammen med argumentene som den tilbyr.

I denne artikkelen skal vi gjøre bruk av wp_remote_post slik at vi faktisk kan se den i aksjon. Husk at dette - som wp_remote_post - er en del av HTTP API, som det er andre funksjoner verdt å vurdere.

Men for nå skal vi sette wp_remote_post å jobbe.

Spesielt skal vi gjøre følgende:

  • Når siden lastes, skal vi sende inn noen informasjon til et tilpasset skript
  • Skriptet vil undersøke informasjonen og returnere den til vår side
  • Vi viser da dataene på siden

Visst, det er litt av et utprøvd eksempel, men det vil gi oss opplevelsen av å lage et eget PHP-skript som kan brukes til operasjoner utløst av bruk av wp_remote_post.

Uansett, i dette eksemplet skal vi bruke PHP $ _SERVER samling for å logge når brukeren har lagt inn sin preferanse i stedet for å kreve at de har logget inn.

Til slutt vil kildekoden bli gjort tilgjengelig på GitHub og tilgjengelig i slutten av denne serien i følgende artikkel.

For nå, men la oss begynne med å jobbe med plugin.


Stubbing ut klassen

Hvis du har fulgt noen av artiklene mine de siste månedene, vet du at jeg er fan av singleton-mønsteret, og at jeg vanligvis bruker samme boilerplate for å bygge mine plugins.

For det formål vil mye av dette bli repeterende - det er greit, for nå. Forretningslogikken - eller kjernelogikken - av plugin er hva som vil forandre seg, så hold deg oppdatert.

Forbered pluggen

I din wp-innhold / tillegg katalog, opprett en katalog som heter wp-fjernetter f.eks som dette vil være navnet på pluginet vårt. Etter det, alle følgende filer:

  • wp-ekstern-post-example.php
  • class-wp-remote-post-example.php
  • wp-fjern receiver.php

I wp-ekstern-post-example.php, legg til følgende kode:

 wp_remote_post. * Versjon: 1.0.0 * Forfatter: Tom McFarlin * Forfatter URI: http://tommcfarlin.com * Lisens: GPL-2.0 + * Lisens URI: http://www.gnu.org/licenses/gpl-2.0.txt * / // Hvis denne filen kalles direkte, avbryt. hvis (! definert ('WPINC')) die;  require_once (plugin_dir_path (__FILE__). 'class-wp-remote-post.php'); WP_Remote_Post_Example :: get_instance (); "

Så, i class-wp-remote-post-example.php legg til følgende kode:

  

Til slutt legger du til følgende linje til wp-fjern receiver.php:

 Postdataene"; ekko "
    "; foreach ($ _POST som $ key => $ verdi) echo"
  • ". $ key.": ". $ value."
  • "; ekko "
"; ekko "

Du kan nå lagre eller ignorere denne informasjonen,

";"

Legg merke til at vi skal være iterating gjennom listen over $ _POST data og vise det i et listformat som gjør det enkelt å lese.

Vær oppmerksom på at jeg, for å få rom, forlater kodekommentarer ut av dette pluginet. Den nedlastbare filen på GitHub vil bli fullt dokumentert og vil også være tilgjengelig i neste innlegg.

På dette tidspunktet bør du kunne aktivere pluginet; Imidlertid vil ingenting faktisk skje ved aktivering i tillegg til å se en vellykket melding.

Dette er bra!

Få forespørselsinformasjonen

På dette tidspunkt, la oss samle informasjonen vi vil sende som en del av forespørselen. Spesielt, la oss få følgende:

  • Den unike adressen til den besøkende
  • Hjemmesiden til hjemmesiden for bloggen
  • Adressen til siden som blir besøkt

Legg til følgende linje i konstruktøren (den private __constructfunksjon, det vil si - ikke offentligheten get_instance funksjon):

 add_action ('the_content', array ($ this, 'get_post_response'));

Deretter legger du til følgende funksjon i klassen:

 offentlig funksjon increment_visitor_count ($ innhold) if (is_single ()) $ unique_id = $ _SERVER ['REMOTE_ADDR']; $ site_url = site_url (); $ page_url = get_permalink ();  returner $ innhold 

Her tar vi den unike IDen fra REMOTE_ADDR indeks av $ _SERVER samling tar vi webadressen til webområdet som definert av WordPress, og vi lagrer permalinken til gjeldende side i sin egen variabel.

Gjør forespørselen

På dette tidspunktet er vi klare til å gjøre forespørselen. Husk fra forrige artikkel at det er flere opplysninger du må sende sammen med forespørselen:

  • URL-adressen
  • Innholdet i kroppen (som vi skal bruke som den unike IDen, adressen og siden vist

Lett nok, rett?

Så la oss fortsette å oppdatere vår funksjon ovenfor med følgende kodenavn slik at funksjonen nå ser slik ut:

 offentlig funksjon increment_visitor_count ($ innhold) if (is_single ()) $ unique_id = $ _SERVER ['REMOTE_ADDR']; $ site_url = site_url (); $ page_url = get_permalink (); $ url = plugins_url ('wp-remote-post-example / wp-remote-receiver.php'); $ respons = wp_remote_post ($ url, array ('body' => array ('unikt id' => $ unique_id, 'adresse' => $ site_url, 'page-viewed' => $ side_url)));  returner $ innhold 

På dette tidspunktet bør du kunne laste på siden, selv om du ikke nødvendigvis vil se noe som skjer.

Likevel er det ingenting også komplisert, rett?

Vis resultatet

På dette tidspunktet antas at alt er koblet til riktig, nå kan vi vise resultatene.

For å gjøre dette må vi først sjekke for å se om det finnes en feil, og vis en melding hvis det er det; Ellers vil vi vise resultatene av etterspørselen.

Legg til følgende betinget av funksjonen ovenfor direkte under wp_remote_post anrop:

 hvis (is_wp_error ($ response)) $ html = '
'; $ html. = __ ('Det oppstod et problem å hente svaret fra serveren.', 'wprp-example'); $ html. = '
'; ellers $ html = '
'; $ html. = '

'. __ ('Din melding postet med suksess! Svaret var som følger:', 'wprp-example'). '

'; $ html. = '

'. $ respons ['body']. '

'; $ html. = '
'; $ content. = $ html;

Vær oppmerksom på at vi velger å legge til noen HTML basert på svaret som vises nederst i innlegget.


Den nåværende arbeidsversjonen

På dette tidspunktet bør den nåværende arbeidsversjonen av pluginet se slik ut:

  array ('unique-id' => $ unique_id, 'adresse' => $ site_url, 'page-viewed' => $ side_url))); hvis (is_wp_error ($ response)) $ html = '
'; $ html. = __ ('Det oppstod et problem å hente svaret fra serveren.', 'wprp-example'); $ html. = '
'; ellers $ html = '
'; $ html. = '

'. __ ('Din melding postet med suksess! Svaret var som følger:', 'wprp-example'). '

'; $ html. = '

'. $ respons ['body']. '

'; $ html. = '
'; $ content. = $ html; returner $ innhold

I neste og siste innlegg i denne serien vil vi jobbe med å gjøre informasjonen som følger med på bunnen av innlegget, se litt nyere gjennom bruk av LESS for CSS bare for å få litt erfaring med det, og for å fortsette å forbedre måten plugin ser ut.

Vi vil også sørge for at pluginet er fullt dokumentert og tilgjengelig på GitHub for videre gjennomgang.

Inntil da tinker rundt med det vi har dekket her, og vi vil ha mer å dele i den endelige artikkelen.