Slik viser WordPress Sidebar på Non-WordPress Websites
Mens jeg jobbet med mitt siste prosjekt, DevGrow Diskusjoner, kom jeg over behovet for legg inn hele mitt WordPress sidebar på et ikke-WordPress-nettsted - spesielt a bbPress forum. Siden jeg bruker forskjellige widgets for å vise populære innlegg og annet dynamisk innhold, ville det ikke være nok å kopiere og lime inn HTML-en. Til slutt er det egentlig bare to måter å gå om dette på:
- Inkluder din wp-load.php fil i søknaden din og i realiteten laste hele WordPress for å få tilgang til plugin-funksjonene
- Bruk enkel caching til å lagre sidefeltet i HTML-format og inkludere det i et hvilket som helst annet program, og gjenoppbygg det etter behov når nytt innhold publiseres
Hvis det ikke er åpenbart nok, er det første alternativet svært kostbart når det gjelder databasespørsmål, og kan redusere nettstedet ditt betydelig. Det andre alternativet krever litt innsats i implementeringen, men ytelsesvis er det ingen konkurranse.
Caching din WordPress Sidebar
Før vi kan skrive vår funksjon, må vi forstå nøyaktig hva vi prøver å gjøre. Vårt mål er å cache vår sidefelt til en tekstfil og Oppdater den cachen når vi publiserer et innlegg, endre temaet eller foreta endringer i sidebar-widgets. Siden vi planlegger å bruke hurtigbufferen vår til å vise sidelinjen på et annet program, må vi enkelt slette hurtigbufferen uten noen skadelige effekter (vi vil ikke at sidelinjen skal bli brutt når som helst).
For å oppnå dette effektivt, vil vi også lag en logg av våre cached-filer og bruk det for å avgjøre om cachen skal slettes. Hvis det er tilfelle, vil den faktiske cachefilen overskrives neste gang noen besøker WordPress-siden, slik at et riktig sidebar alltid gjengis på begge applikasjonene.
Opprette funksjonene
For å komme i gang, åpne temaet ditt functions.php fil og legg til følgende funksjoner:
funksjonsbuffer ($ oppgave, $ cacheFile, $ cacheTime = 21600) global $ cache; // Konfigurer filer og kataloger: $ cacheDir = TEMPLATEPATH. "/ Cache"; $ cacheFileName = $ cacheDir. "/ cache- $ cacheFile.txt"; $ cacheLogFile = $ cacheDir. "/ cache-log.txt"; // Lag cachemappe hvis den ikke eksisterer hvis (! Is_dir ($ cacheDir)) mkdir ($ cacheDir, 0755); // Lag en logg av cachefiler med deres nåværende status hvis (file_exists ($ cacheLogFile)) $ cacheLog = unserialize (file_get_contents ($ cacheLogFile)); ellers $ cacheLog = array (); hvis ($ oppgave == 'start') // Hvis cache eksisterer, er mindre enn 6 timer gammel og ikke i slettingskø, behold den - ellers gjenoppbygg cache hvis (file_exists ($ cacheFileName) && (tid () - filemtid ($ cacheFileName)) < $cacheTime && $cacheLog[$cacheFile] == 1) $cache = false; else $cache = true; ob_start(); elseif($task == 'end' && $cache) // If caching, save file contents and update log file_put_contents($cacheFileName,ob_get_contents()); ob_end_flush(); $cacheLog[$cacheFile] = 1; file_put_contents($cacheLogFile,serialize($cacheLog)); elseif($task == 'purge') // Set cache to delete and update log $cacheLog[$cacheFile] = 0; file_put_contents($cacheLogFile,serialize($cacheLog)); function cache_purge() $cacheDir = TEMPLATEPATH."/cache"; $cacheLogFile = $cacheDir."/cache-log.txt"; if(file_exists($cacheLogFile)) $cacheLog = unserialize(file_get_contents($cacheLogFile)); else $cacheLog = array(); foreach($cacheLog as $key=>$ verdi) $ cacheLog [$ key] = 0; file_put_contents ($ cacheLogFile, serial ($ cacheLog));
Disse første funksjonene, cache, er nøkkelen til å få cachen til å fungere. Avhengig av hvor i filen du kaller det, vil funksjonen sette opp de riktige filene og katalogene, verifisere at en cache må bygges, og i så fall lagrer du utdataene og oppdaterer hurtigbufferloggen. Funksjonen bruker PHPs buffering for å lagre HTML som genereres i en tekstfil.
Den andre funksjonen brukes til å rense alle cachefiler og er nyttig for å legge til eksisterende WordPress-kroker. Med det kan vi gjøre det slik at cachen vår blir fjernet hver gang temaet oppdateres, et innlegg lagres eller våre sidebar widgets oppdateres ved å legge til følgende på slutten av functions.php:
add_action ('switch_theme', 'cache_purge', 10); add_action ('publish_post', 'cache_purge', 10); add_filter ('widget_update_callback', 'cache_purge', 10);
For en fullstendig liste over kroker, sjekk ut WordPress Plugin API Reference.
Konfigurere sidebjelken
Nå som du har funksjonene klare, kan du begynne å cache ditt sidebjelke. Åpne opp din sidebar.php og legg til denne linjen til begynnelsen av filen:
Denne funksjonen begynner å cache sidebaret den trenger, ellers vil det ikke gjøre noe. På grunn av måten PHP-utbufferfunksjonen fungerer, må vi også lukke bufferen på slutten av filen også. Legg til denne linjen helt nederst i samme fil:
Etter at du har lagt til de to linjene, oppdater du bloggen din. Du ser ikke noe i nettleseren din, men sjekk / cache katalog i temamappen din, og du bør se to filer som starter med cache-.
Bruke cachen din
Nå som du har opprettet cachefilen din, kan du bruke den i ethvert program som har tilgang til det. Du kan enkelt gjøre dette ved hjelp av include_once funksjon, men jeg liker også å sørge for at filen eksisterer, bare for å være trygg:
Bare vær sikker på å dobbeltsjekke filbanen din er riktig. Hvis du vil angi cachen din for å slette fra et eksternt program, må du inkludere cache_purge Funger i skriptet ditt et sted og bare ring det når det er nødvendig. Etter det er det bare et spørsmål om å ringe funksjonen:
Konklusjon
Denne teknikken er veldig nyttig for alle PHP-applikasjoner, spesielt når du vil vise dynamisk innhold uten å måtte ofre ytelse. Bruk den til å øke hastigheten på WordPress-installasjonen din, eller bruk nyttige biter (som sidefeltet) på et hvilket som helst annet nettsted eller program.
Redaktørens notat: Dette innlegget er skrevet av Monjurul Dolon for Hongkiat.com. Monjurul er en NYC-basert grensesnittsdesigner og webutvikler, som frilanserer seg gjennom livet. Han blogger på DevGrow.com, hvor han deler tips og ressurser på webutvikling og design.