Heeft u alle gebruikte GoToWebinar van Citrix gebruikt? Nee? Maak je geen zorgen, je bent niet de enige. Heb je echter ooit geprobeerd een dienst in WordPress te binden? MailChimp, Mad Mimi, PayPal, Twitter? Hoewel deze services in veel specifieke gevallen verschillen, is het algemene idee hoe we gegevens van externe API's in WordPress kunnen brengen hetzelfde. In dit artikel zal ik dit onderzoeken door de ogen van een voorbeeldintegratie met GoToWebinar van Citrix.
Met GoToWebinar kunt u live webcast-evenementen plannen waarbij het publiek en de presentatoren lid worden van een gemeenschappelijke gebruikersinterface. De presentatoren kunnen dan dia's, hun scherm, hun webcams delen en allerlei leuke dingen doen.
De service bestaat al een tijdje dus het onvermijdelijke is gebeurd: het heeft nu een API - en een behoorlijk goede.
In een recent project dat ik leidde, wilden we de registraties ter plaatse houden, en we wilden ook registrantgegevens beschikbaar in WordPress. Zonder de API is dit gewoon niet mogelijk. Standaard heeft elk webinar een registratielink waarmee u off-site naar het GoToWebinar-systeem gaat, waar gebruikers zich registreren. Het werkt prima, maar we wilden gebruikers niet verwarren met deze plotselinge sprong.
Ik dacht dat ik je zou begeleiden bij het proces van hoe we dit bereikten met verrassend weinig code!
Voordat we in de afgrond duiken, heb je een paar dingen nodig. U moet een GoToWebinar-account hebben en u moet zich ook met uw account aanmelden bij het Developer Center. Als je daar bent, klik je op de grote Voeg een nieuwe app toe knop.
Volg de instructies op het scherm en vul alle velden in. Zorg ervoor dat u selecteert dat u een GoToWebinar-toepassing aan het bouwen bent. Voor de Applicatie-URL zorg ervoor om te gebruiken https://api.citrixonline.com
. U moet dit wijzigen wanneer u OAuth gebruikt, maar in onze voorbeelden gebruiken we directe login-verificatie, waardoor deze URL de beste optie is.
Nadat de toepassing is gemaakt, noteert u de Gebruikers sleutel. We zullen dit later gebruiken in onze API-aanroepen. Anders is dat de reden voor de installatie, dus nu is het tijd om onze handen vuil te maken.
API's volgen tegenwoordig meestal REST-richtlijnen, wat staat voor Representational State Transfer. Zonder in te gaan op de kern van de zaak, komt het neer op een eenvoudige interface waarmee u op een heel natuurlijke manier kunt communiceren.
Zoals ik al zei, is elke API anders in zijn specificaties, maar de algemene manier waarop we ze gebruiken is ongeveer hetzelfde:
Het is echt zo simpel. Als je hebt geprobeerd de PayPal-documentatie helemaal opnieuw te lezen (wat vreselijk is), was je misschien in de veronderstelling dat werken met API's een verschrikkelijk belastingsproces is. Ik denk dat een deel van de verwarring voortkomt uit de moeilijkheid van authenticatie en het feit dat ontwikkelaars die alleen bekend zijn met PHP niet echt gewend zijn aan HTTP-gesprekken die meestal worden weergegeven zonder enige PHP-code ernaast. Laten we dat allemaal opruimen, zullen we?
Een vereiste voor alles wat we gaan doen, is HTTP-aanroepen op de juiste manier uitvoeren. Meestal zie je tutorials met CURL of gewoon raw HTTP, maar WordPress laat ons (zoals gewoonlijk) omgaan met zijn HTTP API.
Omdat HTTP-oproepen een aantal verschillende delen kunnen hebben, vond ik het een goed idee om hier wat dieper op in te gaan. Laten we heel kort kijken naar wat een HTTP-verzoek echt is.
Een HTTP-verzoek wordt verzonden naar een specifieke URL en dit is waar API-eindpunten en specifieke routes vandaan komen. De URL in de GoToWebinar-documentatie voor het verkrijgen van alle registranten voor een webinar is bijvoorbeeld:
https://api.citrixonline.com/G2W/rest/organizers/organizerKey/webinars/webinarKey/registrants
Zelfs als u uw echte organizersleutel en uw webinar-ID hebt, is het gebruik van de URL niet genoeg. Een HTTP-verzoek is meer dan alleen een URL. Het bevat een hoop andere informatie, voornamelijk een aantal headers en misschien zelfs een body.
Dit is vrij eenvoudig te begrijpen wanneer u gegevens ontvangt. Wanneer u een website bezoekt, geeft uw browser een verzoek uit en krijgt een HTTP-antwoord. Het antwoord is niet alleen de website die u voor u ziet. Het bevat een aantal headers, zoals de statuscode, die waarschijnlijk een 200 OK is. De code die door de browser wordt geïnterpreteerd en voor u wordt weergegeven, wordt verzonden in de lichaam van het antwoord.
Daarom gaat de documentatie wat gedetailleerder in: het geeft een voorbeeld van een HTTP-verzoek:
KRIJG https://api.citrixonline.com/G2W/rest/organisators/7913299991555673093/webinars/2575999967611407361/registrants HTTP / 1.1 Accepteer: application / json Content-Type: application / json Autorisatie: OAuth oauth_token = hdKAifAke73JTJR5GABCdByGz4kp
Deze puinhoop van snaren is eigenlijk niet zo moeilijk te ontcijferen. Zelfs als u niet begrijpt wat alles is, kunt u dit verzoek vrij gemakkelijk bouwen met de native functies van WordPress.
Het begint allemaal met KRIJGEN
, wat betekent dat dit een get-verzoek zal zijn. WordPress biedt de wp_remote_get ()
functie, die prima werkt. Dit wordt gevolgd door de URL, die we doorgeven als de eerste parameter voor deze functie. Vervolgens zien we de HTTP-versie, die kan worden ingesteld in het tweede argument dat een reeks opties is.
Alles achteraf is een header. De Aanvaarden
de waarde van de kop is application / json
, de Content-Type
de waarde van de kop is application / json
enzovoorts. Met deze informatie in gedachten, laten we ons HTTP-verzoek maken in WordPress:
$ url = 'https://api.citrixonline.com/G2W/rest/organisators/7215599994255673093/webinars/2575945029611407361/registrants'; $ args = array ('httpversion' => '1.1', 'headers' => array ('Accept' => 'application / json', 'Content-type' => 'application / json', 'Autorisatie' => 'OAuth oauth_token = hdKAifAke73gh885ghJTJR5GA4kp')); $ http_request = wp_remote_get ($ url, $ args);
Hoewel dit een specifiek voorbeeld is dat we binnenkort in meer detail zullen bekijken, is het afhaalpunt dit: HTTP-verzoeken zijn niet zo intimiderend. Meestal moet je een URL instellen, wat headers en in sommige gevallen een body, en dat is het dan. U ontvangt dan enkele gegevens terug, meestal in JSON-vorm, die u kunt doorlopen json_decode ()
en gebruik vervolgens als een normale array of een normaal object.
Nu we de basisstructuur van een HTTP-verzoek kennen, gaan we kijken hoe we onszelf kunnen verifiëren en in staat zijn om eventuele oproepen te doen die we willen.
In dit voorbeeld zal ik kijken naar de directe inlogmethode van authenticatie. De stroom voor OAuth is iets complexer, maar de basis is hetzelfde: u hoeft slechts twee HTTP-aanroepen te maken in plaats van één.
Dat gezegd hebbende, raad ik aan OAuth te gebruiken omdat het veiliger is en steeds meer API's het integreren of zelfs vereisen!
De documentatie voor directe login maakt wat we willen bereiken heel duidelijk. Eigenlijk merkte ik in mijn eigen programmering dat toen ik erachter kwam hoe HTTP-verzoeken gemakkelijk konden worden gemaakt, ik vond dat alle API-documentatie a lot gemakkelijker te begrijpen. Hopelijk zal dit artikel hetzelfde voor je doen!
Volgens de documentatie kunnen we een KRIJGEN
bellen naar https://api.citrixonline.com/oauth/access_token
met de juiste Aanvaarden
en Content-Type
headers naast het instellen van de grant_type
, gebruikersnaam
en wachtwoord
URL-parameters en GoToWebinar spugen onze authenticatiegegevens. Laten we dat nu proberen:
$ url = 'https://api.citrixonline.com/oauth/[email protected]&password=mysecretpass&client_id=mycitrixapikey'; $ args = array ('headers' => array ('Accept' => 'application / json', 'Content-type' => 'application / json')); $ http_request = wp_remote_get ($ url, $ args);
Merk op dat de waarden van al deze parameters nep zijn. U moet de gebruiken gebruikersnaam
(e-mail) en wachtwoord van een echt GoToWebinar-account. De klant identificatie
moet de 'Consumer Key' van uw applicatie zijn, die we hebben ingesteld in het gedeelte 'Before We Begin' hierboven.
Als je gebruikt var_dump ()
om de inhoud van de $ http_request
variabele, je zult zien dat het een array is bestaande uit een aantal leden zoals "headers", "body", "response", enzovoort. Voor onze doeleinden bevat het "lichaam" de belangrijkste informatie:
Zoals je misschien al gemerkt hebt, is dit een JSON-string die we moeten converteren naar een bruikbare vorm. Het doorlopen json_decode ()
geeft ons een goede PHP-array als we de tweede parameter op true zetten (anders wordt het een array).
$ body = json_decode ($ http_request, true);
Van al deze gegevens heb je twee dingen nodig: de toegangstoken
en jouw organizer_key
. Het toegangstoken is uw "tijdelijke wachtwoord". Het idee is om te voorkomen dat u uw account moet verzenden werkelijk wachtwoord bij elk verzoek: u vraagt slechts één keer een tijdelijk toegangstoken aan met uw inloggegevens en gebruikt het vervolgens om elk volgend verzoek te ondertekenen.
Laten we ons voorbeeld opnieuw bekijken in het gedeelte HTTP-oproepen en misschien zal het voorbeeld nu een stuk duidelijker zijn. Hier is dezelfde code met tijdelijke aanduidingen voor alle informatie die we nu hebben:
$ organizer_key = '2893726'; $ webinar_id = '849927254829281838'; $ access_token = 'h7dwo20vAsXI8GLaGvun0wOJ6H5I'; $ url = "https://api.citrixonline.com/G2W/rest/organizers/$organizer_key/webinars/$webinar_id/registrants"; $ args = array ('httpversion' => '1.1', 'headers' => array ('Accept' => 'application / json', 'Content-type' => 'application / json', 'Autorisatie' => "OAuth oauth_token = $ access_token")); $ http_request = wp_remote_get ($ url, $ args);
De webinar_id
daar komt van een daadwerkelijke webinar die ik heb gemaakt in GoToWebinar, en je kunt de ID helemaal in de URL vinden. In dit stadium moet het duidelijk zijn waar de gegevens komen uit, maar in het voorbeeld is het nog steeds in essentie hard gecodeerd - laten we dat duidelijk maken!
Moeten we authenticatiegegevens opslaan en vervalt deze? Ja en ja, en aangezien het woord "verlopen" werd gebruikt in combinatie met "winkel", hebben we het hier over een tijdelijke situatie, dus voer de Transients API in.
Als je geen idee hebt wat dat is, maak je geen zorgen! Het is vrij eenvoudig: je kunt dingen opslaan met behulp van WordPress-functies met een tijdstempel waarop de gegevens verlopen. Laten we onszelf een miniklasse schrijven om de creatie van een toegangstoken eenvoudig aan te kunnen. Dit zal in het begin eng lijken, maar het is supereenvoudig - er volgt een verklaring!
class Citrix_WP var $ client_id; var $ wachtwoord; var $ user_id; var $ toegang; function __construct () $ this-> client_id = 'sI48T4iXP0J6720G9wAB0Ghfg37576301'; $ this-> user_id = '[email protected]'; $ this-> password = 'superpassword'; $ this-> access_field = 'citrix_access'; $ This-> set_access (); function set_access () $ access = $ this-> get_access (); $ this-> toegang = $ toegang; functie get_access () $ access = get_transient ($ this-> access_field); if (empty ($ access)) $ access = $ this-> request_access (); $ this-> set_access_transient ($ toegang); retourneer $ toegang; function set_access_transient ($ access) set_transient ($ this-> access_field, $ access, DAY_IN_SECONDS); function request_data ($ url, $ args = array ()) $ defaults = array ('httpversion' => '1.1', 'headers' => array ('Accept' => 'application / json', 'Content- Typ '=>' application / json ',' Authorization '=>' OAuth oauth_token = ". $ This-> access [" access_token '])); $ args = wp_parse_args ($ args, $ defaults); $ http_request = wp_remote_get ($ url, $ args); $ body = json_decode ($ http_request ['body'], true); if (! empty ($ body ['int_err_code'])) $ this-> get_access (); $ this-> request_data ($ url, $ args); else return $ body; function request_access () $ url = 'https://api.citrixonline.com/oauth/access_token?grant_type=password&user_id='. $ this-> user_id. '& wachtwoord ='. $ dit-> wachtwoord. '& client_id ='. $ This-> client_id; $ args = array ('headers' => array ('Accept' => 'application / json', 'Content-type' => 'application / json')); $ result = wp_remote_get ($ url, $ args); return json_decode ($ result ['body'], true);
Wat is hier in vredesnaam aan de hand ?! Er is een volkomen eenvoudige verklaring: we willen zo weinig mogelijk code schrijven bij het afhandelen van daadwerkelijke HTTP-oproepen. We weten al dat we voor elk een toegangstoken nodig hebben en dat dit toegangstoken op een gegeven moment verloopt. Dus voor elke oproep die we doen, moeten we controleren of het toegangstoken geldig is. Als dit niet het geval is, moeten we een nieuwe aanvragen en de oorspronkelijke oproep opnieuw uitvoeren. Deze klasse zorgt voor dat alles.
In de construct-functie, die wordt uitgevoerd zodra een object wordt geïnstantieerd, heb ik mijn gecodeerd klant identificatie
, gebruikersnaam
en wachtwoord
. In werkelijkheid is het een goed idee om constanten te gebruiken of ze zelfs door te geven aan de constructiefunctie, maar ik dacht dat ik het allemaal op zichzelf zou nemen voor deze les.
Nog een ding dat we nodig hebben, is een plaats om de toegangsreferenties op te slaan die we van Citrix ontvangen. Ik zal een transient gebruiken en zijn naam zal "citrix_access" zijn. Ik bewaar deze veldnaam als een eigenschap van de klasse. Eindelijk voeren we de set_access ()
methode.
Dit zorgt ervoor dat we geldige inloggegevens hebben en deze opslaan in de toegang
eigendom voor gemakkelijke toegang. Hoe zorgt het ervoor dat alles geldig is? Het gebruikt de toegang krijgen()
methode. Met deze methode worden de toegangsreferenties van onze transient opgehaald. Als de transiënt niet leeg is, wordt de waarde van de transient geretourneerd. Als de transient leeg is, gebruikt deze de toegang vragen()
methode om nieuwe inloggegevens van Citrix te verkrijgen, stelt de tijdelijke waarde in op de nieuwe inloggegevens en retourneert deze ook.
In dit stadium hebben we toegangsreferenties tot onze beschikking, zodat we kunnen beginnen met het doen van verzoeken. Er is nog een ander probleem: de inloggegevens aan de Citrix-kant zijn mogelijk verlopen om veiligheidsredenen. Als dit het geval is, komen onze verzoeken terug met een foutmelding. Daarom heb ik een toegevoegd request_data ()
methode die dit voor ons aankan.
Deze methode bevat bijna dezelfde code die we eerder hebben geschreven, waarbij de eigenschappen van de klasse worden gebruikt om de aanroep te vullen. Merk op dat ik enkele headers als standaard heb toegevoegd. Deze zullen waarschijnlijk niet veranderen van call-to-call, waardoor het in de meeste gevallen overbodig is om argumenten te negeren.
Bovendien, de methode controleert de reactie van het lichaam. Als het een foutcode bevat, genereert het nieuwe toegangsreferenties en roept het de methode op met dezelfde parameters.
Hier loont ons harde werk. Om een lijst met registranten te bemachtigen, is hier alles wat we moeten doen:
$ citrix = nieuwe Citrix_WP; $ registrants = $ citrix-> request_data ('https://api.citrixonline.com/G2W/rest/organizers/'. $ citrix-> access ['organizer_key']. '/ webinars / 849927252521582337 / registrants');
We hoeven geen args toe te voegen, alleen de URL en we ontvangen alle lekkere gegevens van Citrix rechtsback.
Een waarschuwing: de klas die ik heb geschreven is een zeer snelle demonstratieklas. Het werkt nu prima voor mij, maar ik raad het niet aan om het in de productie te gebruiken. Hier zijn slechts enkele problemen:
request_data ()
functie is niet geweldig. Als het verzoek om een andere reden dan een ongeldig token mislukt, kunt u een oneindige lus in gaan.Als een voorbeeld is het voorbeeld prima, maar wees voorzichtig met fouten bij het gebruik ervan.
Zoals altijd is iemand al aardig genoeg geweest om een les voor ons te maken die veel completer is dan degene die ik je zojuist heb laten zien als een casestudy. Teodor Talov schreef een Wrapper Class voor de Citrix API's die beschikbaar is via GitHub.
Ik zal zijn klas gebruiken om vanaf nu interactie te hebben met GoToWebinar. Om hetzelfde te bereiken als hierboven, heb je wat voorbereiding en een paar regels code nodig. Allereerst is het gebruik van de klas het gemakkelijkst als je het via Composer krijgt. Componist is supereenvoudig te installeren als u dit nog niet hebt: volg de gids Aan de slag en ontmoet me hier binnen vijf minuten.
Gebruik de terminal of opdrachtprompt om naar de map van uw plug-in te gaan en typ de volgende opdracht:
componist vereist teodortalov / citrix
Hiermee pak je de bestanden die je nodig hebt en plaats je ze in de leveranciersmap. Vervolgens moet u, binnen uw plug-in, het autoload-bestand als volgt opnemen:
include (plugin_dir_path (__FILE__). '/vendor/autoload.php');
Dat is het voor de voorbereiding, dus we kunnen de klas nu gebruiken. Hier is een fragment dat binnenkort webinars uit Citrix zal trekken.
$ client = new \ Citrix \ Authentication \ Direct ('sI48T4iXP0J6720G9wAB0GHIHiIoyw20'); $ client-> auth ('[email protected]', 'gnasher1'); $ goToWebinar = new \ Citrix \ GoToWebinar ($ client); $ webinars = $ goToWebinar-> getUpcoming ();
Makkelijk piemend, toch? Met deze krachtigere klasse in onze toolbelt, laten we iets leuks bouwen! Een onderdeel van ons plan was om aangepaste berichttypen te gebruiken om webinars op te slaan om ze ter plaatse te kunnen presenteren. Het enige wat we nodig hebben is een metaveld waarin de Citrix Webinar-ID is opgeslagen en we kunnen al het andere van Citrix ophalen, bijvoorbeeld: de registranten. Laten we een metabox maken die de registranten van een webinar nu laat zien!
Laten we eerst de belangrijkste WordPress-dingen uit de weg ruimen: de metabox zelf. Hier is wat code die een lege metabox met een mooie titel zal weergeven:
function my_registrants_metabox () add_meta_box ('webinar_registrants', 'Registrants', 'my_registrants_metabox_content', 'webinar'); function my_registrants_metabox_content ($ post) // Hier is inhoud metabox.
Je hebt natuurlijk een aangepast berichttype met de naam 'webinar' nodig om dit te laten verschijnen. Als u daarover verder moet lezen, hebben we een handige handleiding voor het maken van aangepaste postsoorten.
Ik vind het leuk om een klein HTML-prototype te maken van wat het beoogde eindresultaat is, dus laten we dat doen. Dummy-gegevens, maar een echte gebruikersinterface. Ik ben van plan gebruik te maken van Datatables, een jQuery-tabelplug-in, dus ik zal ook de scripts en stijlen hiervoor in de wacht slepen. Hier gaat:
function my_backend_assets () wp_register_script ('datatables', '//cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js', array ('jQuery', 'customselect'), '1.0', waar); wp_register_style ('datatables', '//cdn.datatables.net/1.10.7/css/jquery.dataTables.min.css'); wp_enqueue_script ('mijn-app', plugin_dir_path (__FILE__). '/js/app.js', array ('datatables'), '1.0', true); function my_registrants_metabox () add_meta_box ('webinar_registrants', 'Registrants', 'my_registrants_metabox_content', 'webinar'); function my_registrants_metabox_content ($ post) wp_enqueue_script ('datatables'); wp_enqueue_style ('datatables'); ?>';
Voornaam Achternaam Datum Zone Daniel Pataki [email protected] 2015/08/12 New York Iemand Anders [email protected] 2015/08/13 Parijs Dit zal de markup creëren die we nodig hebben en de stijlen in veiligheid brengen. Alles wat we moeten doen is creëren
js / app.js
in onze plug-in met de volgende inhoud:(functie ($) $ (document) .ready (function ($) $ ('.my-data-table table') .DataTable (););) (jQuery);Het resultaat zou er ongeveer zo uit moeten zien als de onderstaande schermafbeelding.
Het is niet super mooi, maar ik repareer dat door een ander stylesheet in te checken en een aantal standaardwaarden te overschrijven die door Datatables zijn opgelegd. De volgende stap is om gegevens van Citrix te pakken in plaats van te vervalsen.
Ik heb besloten om opnieuw transiënten te gebruiken om ervoor te zorgen dat we Citrix niet elke keer bombarderen met verzoeken wanneer een webinar-pagina voor bewerken wordt bekeken. We pakken de lijst met registranten en slaan ze op in een voorbijgaande fase met een vervaltijd van een uur. Dit betekent dat de lijst elk uur alleen wordt vernieuwd, maar het vermindert onze verzoeken tot één per uur in plaats van één per bezoek.
We zullen ook een metaveld moeten gebruiken voor de webinar-ID. Ik gebruik meestal geavanceerde aangepaste velden, maar omdat dit een eenvoudig voorbeeld is, laten we gewoon de standaard aangepaste veldenoptie gebruiken in WordPress en een webinar-ID opslaan met de sleutel
webinar_id
. Hier is de definitieve code:function my_backend_assets () wp_register_script ('datatables', '//cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js', array ('jQuery', 'customselect'), '1.0', waar); wp_register_style ('datatables', '//cdn.datatables.net/1.10.7/css/jquery.dataTables.min.css'); wp_enqueue_script ('mijn-app', plugin_dir_path (__FILE__). '/js/app.js', array ('datatables'), '1.0', true); wp_register_style ('mijn-datatables', plugin_dir_path (__FILE__). '/css/my-datatables.css'); function my_registrants_metabox () add_meta_box ('webinar_registrants', 'Registrants', 'my_registrants_metabox_content', 'webinar'); function my_registrants_metabox_content ($ post) wp_enqueue_script ('datatables'); wp_enqueue_style ('datatables'); wp_enqueue_style ('mijn-datatables'); $ webinar_id = get_field ('webinar_id', $ post-> ID); $ registrants = get_transient ('registrants_'. $ webinar_id); if (empty ($ registrants)) $ client = new \ Citrix \ Authentication \ Direct ('consumer_key'); $ client-> auth ('user_id', 'password'); $ goToWebinar = new \ Citrix \ GoToWebinar ($ client); $ webinars = $ goToWebinar-> getRegistrants ($ webinar_id); set_transient ('registrants_'. $ webinar_id, $ registrants, HOUR_IN_SECONDS); if (count ($ registrants)> 0) echo ''; echo'';'; echo ''; echo '
'; echo ''; echo ' '; echo ''; echo ''; foreach ($ registrants als $ registrant) $ time_zone = explode ('/', $ registrant ['timeZone']); echo 'Voornaam '; echo 'Achternaam '; echo 'Datum '; echo 'Zone '; echo ''; echo ' '; echo ''; echo ''. $ registrant ['firstName']. ' '; echo ''. $ registrant ['achternaam']. ' '; echo ''. $ registrant ['email']. ' '; echo ''. datum ('Y-m-d', strtotime ($ registrant ['registrationDate'])). ' '; echo ''. str_replace ('_', ", $ time_zone [1]). ' '; echo 'Hier zijn een paar dingen gebeurd. Allereerst heb ik een nieuwe stylesheet toegevoegd, alleen om wat visueel onderscheid te maken in de lijst die je in de onderstaande schermafbeelding ziet.
Ik probeer vervolgens de lijst met registranten van de transiënten te krijgen. Als dit leeg wordt geretourneerd, betekent dit dat de transiënt nooit is ingesteld of is verlopen. Als dit het geval is, halen we registranten op en zetten ze deze tijdelijk in.
Vervolgens doorlopen we de registranten om de tafel te vullen en we zijn er helemaal klaar voor! Hier is hoe dit allemaal eruit ziet met een aantal toegevoegde stijlen:
Conclusie
En daar heb je het: gegevens afkomstig van een externe API, in de cache opgeslagen en weergegeven, allemaal met native WordPress-mechanismen en -functies. Hoewel dit enige tijd kost om te lezen en te verteren, vooral als je zoiets voor de eerste keer doet, duurt het echt niet erg lang als je je hoofd eromheen wikkelt.
Als je eenmaal enige ervaring hebt met externe API's, zal het grootste deel van je tijd worden besteed aan het uitzoeken welke methoden en opties ze hebben, niet hoe je HTTP-verzoeken moet doen en hoe je gegevens kunt opslaan enzovoort.
Ik kan u van harte aanbevelen de HTTP API te gebruiken in combinatie met de Transients API. Het is een waardevolle en snelle aanwinst gebleken in mijn toolbelt.