Heartbeat API Komma igång

Med 3.6, aka "Oscar", precis släppt, kan vi titta på några av de nya funktionerna som finns tillgängliga för utvecklare. I synnerhet ser jag i den här serien på det nya hjärtslagsprogrammet, och visar hur du kan använda det i dina plugins och teman.


Vad är Heartbeat API?

Hjärtslag API möjliggör regelbunden kommunikation mellan användarens webbläsare och servern. En av de ursprungliga motiveringarna var att låta inlägg och varningsmeddelanden när flera än en användare försöker redigera ett inlägg eller varna användaren när inloggningen har löpt ut.

Denna "kommunikation" involverar rutinmässigt att skicka data till servern, som sedan svarar med lämpliga data. API: n tillåter plugins att bifoga sin egen data i båda ändar, vilket ger din plugin möjlighet att även kommunicera mellan server och webbläsare. Du kan tänka på dessa steg (data som skickas från webbläsare till server och svar skickat från server till webbläsare) som de två "beats" som utgör en hjärtcykel. Hela denna process upprepas med jämna mellanrum. Allt detta händer i bakgrunden, så du kommer förmodligen aldrig vet att det är där.


Sänder data från webbläsare till server

Heartbeat startar som standard automatiskt, men skickar bara data till servern när den har data att skicka. För att skicka data måste du använda wp.heartbeat.enqueue () funktionen i din JavaScript-fil. Denna funktion tar tre argument:

  • Hantera - (sträng) Detta är bara en strängidentifierare för dina data. Se till att det är unikt.
  • Data - (objekt) Data som ska skickas som ett objekt.
  • Åsidosätta - (bool) Oavsett om du vill åka över existerande data. Om det är sant, ersätts alla data som tidigare lagts till med handtaget. Om fel och data finns redan för det handtaget gör det ingenting.

Till exempel:

 wp.heartbeat.enqueue ('wptuts-plugin', 'foo': 'bar', 'wp': 'tuts',, false);

Notera: Alla data som skickas med ett slag tas omedelbart från köen. Data som är efterkodade efter den punkten skickas med nästa takt.

För att kontrollera om ett visst handtag redan har data som väntar i köen eller för att hämta den data kan du använda wp.heartbeat.isQueued (). Denna funktion tar ett handtag som det enda argumentet och returnerar heller null eller tillhörande data som väntar i kön.

Det här är användbart, till exempel om du vill lägga till extra argument till data i kö i kö:

 // Data att lägga var var new_data = 'version': '3.6'; om (data = wp.heartbeat.isQueued ('wptuts-plugin')) // Data finns redan - sammanfoga data med nya data new_data = jQuery.extend (data, new_data);  // Köpa och överrida befintliga data wp.heartbeat.enqueue ('wptuts-plugin', new_data, true); / * wptuts-plugin har nu data och new_data associerade med den: 'foo': 'bar', 'wp': 'tuts', 'version': '3.6'; * /

Tips: Du ska lista "hjärtslag'som ett beroende av några JavaScript-filer som använder sig av detta API. Vi kommer att täcka detta, tillsammans med ett fungerande exempel plugin, i del tre.


Sänder data från server till webbläsare

Vid nästa "beat" skickas ovanstående data till servern, när denna data tas emot på serversidan finns tre krokar som utlöses:

  • heartbeat_received - Detta filtrerar serverns svar på webbläsaren. Den skickar också data som tas emot från webbläsaren och adminskärms-ID (eller "front" om den här förfrågan är från fronten).
  • heartbeat_send - Denna krok filtrerar även serverns svar på webbläsaren. Dess enda skillnad mot ovanstående filter är att den inte överför de mottagna data.
  • heartbeat_tick - Denna åtgärd utlöses strax innan svaret är inställt. Den skickar svaret array och skärm ID som argument.

Om den nuvarande användaren är utloggad är krokarna:

  • heartbeat_nopriv_received
  • heartbeat_nopriv_send
  • heartbeat_nopriv_tick

utlöses istället. (nopriv står för inga privilegier)

För det mesta behöver du förmodligen bara det första av dessa filter: heartbeat_received / heartbeat_nopriv_received. Dessa filter överför data som tas emot från webbläsaren och tillåter oss att kontrollera om vi har några data i samband med vårt handtag innan vi inkluderar vårt svar:

 funktion wptuts_respond_to_browser ($ svar, $ data, $ screen_id) if (isset ($ data ['wptuts-plugin'])) // Vi har data med vårt handtag! Låt oss svara på någonting ... // echo $ data ['wptuts-plugin'] ['foo']; // utskrifter "bar"; $ svar ['wptuts-plugin'] = array ('hello' => 'world');  returnera $ svar  // Inloggade användare: add_filter ('heartbeat_received', 'wptuts_respond_to_browser', 10, 3); // Logga ut användare add_filter ('heartbeat_nopriv_received', 'wptuts_respond_to_browser', 10, 3);

Lyssna på återgången "Beat"

Slutligen, för att slutföra cykeln kan vi lyssna på när svaret från servern mottas av webbläsaren. När detta händer uttrycker WordPress händelsen hjärtslag-tick. Vi kan koppla in på detta med vår återuppringning för att bearbeta svaret:

 jQuery (dokument) .ready (funktion ($) $ (dokument) .on ('heartbeat-tick.wptuts-plugin', funktion (händelse, data) if (data.hasOwnProperty ('wptuts-plugin'))  console.log (data ['wptuts-plugin']); // Skriver till konsolen 'hej': 'world'););

Notera: Det rekommenderas starkt att du använder namespaced händelser, det vill du binda till din återuppringning till heartbeat-tick. unikt namnrymd som ovan, och inte bara hjärtslag-tick.

Det är i huvudsak hur man utnyttjar Heartbeat API. I nästa del av serien ser vi på sätt som du kan manipulera taktens puls. I den sista delen skapar vi ett fungerande exempel på ett plugin som använder API: n.