Komma igång med WordPress Transient API, del 2

I det första inlägget i den här serien tog vi definierade vad API: n är, hur det skiljer sig från inställnings API och några av de allmänna samtal som vi kan göra till API: n. I det här inlägget tar vi en titt på en praktisk implementering av API: n och hur man hanterar vissa idiosynkraser som kommer att hantera utgått data.

WordPress Transients API är en kraftfull (men verkligen lätt att använda) aspekt av WordPress API. Generellt sett gör det det väldigt enkelt att lagra data med en utgångstid och gör det väldigt lätt att dra nytta av olika cachepluggar för att i slutändan öka hastigheten på din webbplats.


Installera pluginprogrammet

I det här pluginets syfte kommer vi att skapa en enkel widget som kommer att lista en bloggs bästa kommenterare hela tiden. Målet med plugin är att hålla det lutat så att vi kan markera den transienta funktionaliteten i plugin.

Observera att alla plugins filer kan hämtas från GitHub när som helst. Under tiden fortsätter du och skapar en katalog som heter "top-commenters-cached" och ser till att den har följande katalogstruktur:

Om du inte är intresserad av att lokalisera pluginet kan du lämna "lang" -katalogen ur pluginprogrammet. Vid den här tiden är vi redo att börja skriva widgeten.


Grundfunktionalitet

Pluggen är enkel. Det borde?

  • Tillåt användaren att ge widgeten en anpassad
  • Hämta de 10 mest populära kommentarerna av bloggens liv

Lätt nog Här är koden för det grundläggande plugin. Observera att det kommenteras hela så spendera någon gång att läsa igenom det för att förstå vad vi gör. Om du inte är bekant med widget-API, glöm inte att kolla in vår WordPress Widget Boilerplate-inlägg.

 klass Top_Commenters_Cached utökar WP_Widget const name = 'Top Commenters (Cached!)'; const locale = "top-commenters-cached-locale"; const slug = 'top-commenters-cached'; / * ------------------------------------------------ - * / / * Konstruktör / * ----------------------------------------- --------- * / / ** * Widgetkonstruktören. Anger klassnamn och beskrivning, instantiates * widgeten, laddar lokaliseringsfiler och innehåller nödvändiga skript och * format. * / funktion Top_Commenters_Cached () $ widget_opts = array ('classname' => self :: name, 'description' => __ ('Ett plugin som används för att visa WordPress Transients API för en Envato bloggserie. lokal)); $ this-> WP_Widget (self :: slug, __ (själv :: namn, self :: locale), $ widget_opts); load_plugin_textdomain (self :: locale, false, dirname (plugin_basename (__FILE__)). '/ lang /');  // slutkonstruktör / * ------------------------------------------- ------- * / / * API Funktioner / * ----------------------------------- --------------- * / / ** * Utför innehållet i widgeten. * * @args Mängden formelement * @instance * / function widget ($ args, $ instance) extrakt ($ args, EXTR_SKIP); echo $ before_widget; $ widget_title = empty ($ instance ['widget_title'])? ": apply_filters ('widget_title', $ instance ['widget_title']); $ commenters = $ this-> query_for_commenters (); // Visa widgeten inkludera (WP_PLUGIN_DIR . '/'. själv: slug. '/views/widget.php'); echo $ after_widget; // änd widget / ** * Bearbetar widgetens alternativ som ska sparas. * * @new_instance Den tidigare instansen av värden före uppdateringen. * @old_instance Den nya instansen av värden som ska genereras via uppdateringen. * / Funktionsuppdatering ($ new_instance, $ old_instance) $ instance = $ old_instance; $ instance ['widget_title'] = $ this-> strip ($ new_instance, 'widget_title'); returnera $ instance; // end widget / ** * Genererar administrationsformuläret för widgeten. * * @instance En uppsättning nycklar och värden för widgeten. * / funktionsform ($ instans) $ instance = wp_parse_args ((array) $ instance, array ('widget_title' => ")); $ widget_title = $ this-> strip ($ instance, 'widget_title'); // Visa administratörsformuläret inkluderar (WP_PLUGIN_DIR. '/'. Self :: slug. '/Views/admin.php');  // slutform / * ------------------------------------------- ------- * / / * Privata funktioner / * ----------------------------------- --------------- * / / ** * Hämtar de veckovisa toppkommentarerna under den senaste veckan och lagrar värdena i cacheminnet. * Om cacheminnet är tomt, kommer funktionen att begära information från databasen och * lagra den i cachen. * / privat funktionsfråga_for_kommentarer () $ commenters = null; // fråga databasen för den översta kommentars globala $ wpdb; $ commenters = $ wpdb-> get_results ("välj antal (comment_author) som comments_count, comment_author, comment_type från $ wpdb-> kommentarer där comment_type! = 'pingback' och comment_author! =" och comment_approved = '1' grupp av comment_author order av comment_author desc LIMIT 10 "); returnera $ commenters // end query_for_commenters / * --------------------------------- ----------------- * / / * Hjälperfunktioner / * ------------------------- ------------------------- * / / ** * Bekvämmetod för avtagning av taggar och skråstreck från innehållet * i en formmatning. * * @ obj Förekomsten av argumentet array * @title Titeln på det element som vi tar bort taggar och snedstreck. * / Privata funktionsremsa ($ obj, $ title) return strip_tags (stripslashes ($ obj [$ title]) ); // end strip // end class add_action ('widgets_init', create_function ("," register_widget ("Top_Commenters_Cached"); ')); ?>

Låt oss nu titta på widgetens vy. Det här är den del av plugin som är ansvarig för att visa listan med kommentarer. Det fungerar genom att visa widgetens titel (om den är definierad), och sedan slingrar genom resultaten som skapar ett nytt listobjekt.

  0) ?> 

'; foreach ($ kommenterar som $ commenter) $ comment_list. = '
  • '; // faktiskt skriv ut kommentarens namn och antal kommentarer $ comment_list. = $ commenter-> comment_author; $ comment_list. = '('. $ commenter-> comments_count. ')'; $ comment_list. = '
  • '; // end foreach $ comment_list. = ''; echo $ comment_list; ?>

    Självklart har vi släppt ut en del av koden. Namnlösa: Administratörspanelen. Det borde helt enkelt tillåta användare att ange en titel för deras widget:

     

    Kom ihåg att du kan se hela källkoden och ladda ner plugin från sitt GitHub-arkiv.


    Cache Data

    Vid denna tidpunkt har vi en funktionell plugin; Vi cachar dock inte data ännu. Den mest intensiva delen av det här pluginet är när vi frågar databasen och resultaten av frågan är vad vi faktiskt vill cache så låt oss göra det.

    Leta reda på frågan i koden:

     global $ wpdb; $ commenters = $ wpdb-> get_results ("välj antal (comment_author) som comments_count, comment_author, comment_type från $ wpdb-> kommentarer där comment_type! = 'pingback' och comment_author! =" och comment_approved = '1' grupp av comment_author order av comment_author desc LIMIT 10 ");

    Och låt oss lagra resultaten i 12 timmar med hjälp av det transienta API:

     set_transient ('top_commenters_cached', $ commenters, 60 * 60 * 12);

    Ganska lätt, eller hur? Naturligtvis är vi inte färdiga ännu.


    Hämta data

    När transienten är inställd måste vi kunna hämta övergången. Låt oss sätta upp det här nu:

     privatfunktion query_for_commenters () return get_transient ('top_commenters_cached');  // slutet query_for_commenters

    Det är allt som finns där!

    Men vänta - om du kommer ihåg från det första inlägget i serien, övergår transienterna faktiskt så att vi inte är garanterade att hämta övergående.


    Hitta saknade data

    Oavsett vad du gör, hämtar data som har löpt ut i allmänhet samma process:

    • Kontrollera om transienten existerar
    • Om det finns, använd det
    • Om det inte existerar, sätt det och hämta det sedan

    Så låt oss göra det inom ramen för vårt plugin:

     privatfunktion query_for_commenters () $ commenters = null; // kontrollera om övergången finns. Ange det om det är utgått eller saknas om (! get_transient ('top_commenters_cached')) // fråga databasen för den globala $ wpdb för toppkommentarer; $ commenters = $ wpdb-> get_results ("välj antal (comment_author) som comments_count, comment_author, comment_type från $ wpdb-> kommentarer där comment_type! = 'pingback' och comment_author! =" och comment_approved = '1' grupp av comment_author order av comment_author desc LIMIT 10 "); // lagra resultatet set_transient ('top_commenters_cached', $ commenters, 60 * 60 * 12); // slutet om // transient är garanterat att existera nu, så returnera det returnera get_transient ('top_commenters_cached '); // end query_for_commenters

    Slutsats

    Inte så illa, rätt?

    Som du kan se behöver du bara arbeta med Transients API för att veta när du ska använda den och vilka funktioner som finns tillgängliga. Enligt min mening är det en av de mest kraftfulla aspekterna av WordPress API.

    Om du hittar dig själv att hämta stora mängder data, letar efter ett sätt att utlösa data för en uppdatering eller helt enkelt vill utnyttja cachepluggar, kom ihåg att dra fördel av API-transienten.