Sådan viser WordPress Sidebar på Non-WordPress Websites
Under arbejdet med mit seneste projekt, DevGrow Diskussioner, kom jeg over nødvendigheden af at integrere mit hele WordPress sidebar på et ikke-WordPress-websted - specifikt a bbPress forum. Da jeg bruger forskellige widgets til at vise populære indlæg og andet dynamisk indhold, ville det ikke være tilstrækkeligt at kopiere og indsætte HTML'en. I sidste ende er der virkelig kun to måder at gøre ved dette:
- Inkluder din wp-load.php fil i din ansøgning og i virkeligheden indlæse hele WordPress for at få adgang til pluginfunktionerne
- Brug simpel caching til at gemme sidelinjen i HTML-format og inkludere det i et andet program, og genopbyg det efter behov, når nyt indhold offentliggøres
Hvis det ikke er indlysende nok, er den første mulighed meget kostbar i forhold til databaseforespørgsler og kan markant sænke dit websted. Den anden mulighed kræver en lille indsats i implementeringen, men performance-klog er der ingen konkurrence.
Caching din WordPress sidebjælke
Før vi kan skrive vores funktion, skal vi forstå præcis, hvad vi forsøger at gøre. Vores mål er at cache vores sidebjælke til en tekstfil og Opdatér den cache, når vi offentliggør et indlæg, ændre vores tema eller foretage ændringer i sidepanelets widgets. Da vi planlægger at bruge vores cache til at vise sidefeltet på et andet program, skal vi nemt kunne slette cachen uden nogen skadelige effekter (vi vil ikke have vores sidebar brudt til enhver tid).
For at opnå dette effektivt, vil vi også Opret en logfil af vores cachelagrede filer og brug det for at afgøre, om cachen skal ryddes. Hvis det er tilfældet, overskrives den faktiske cache-fil næste gang nogen besøger WordPress-webstedet, hvilket sikrer, at et korrekt sidebar altid gengives på begge applikationer.
Oprettelse af funktionerne
For at komme i gang skal du åbne dit tema functions.php fil og tilføj følgende funktioner til det:
funktion cache ($ task, $ cacheFile, $ cacheTime = 21600) global $ cache; // Konfigurer filer og mapper: $ cacheDir = TEMPLATEPATH. "/ Cache"; $ cacheFileName = $ cacheDir. "/ cache- $ cacheFile.txt"; $ cacheLogFile = $ cacheDir. "/ cache-log.txt"; // Opret cachemappe, hvis den ikke findes, hvis (! Is_dir ($ cacheDir)) mkdir ($ cacheDir, 0755); // Opret en logfil af cachefiler med deres nuværende status, hvis (file_exists ($ cacheLogFile)) $ cacheLog = unserialize (file_get_contents ($ cacheLogFile)); ellers $ cacheLog = array (); hvis ($ task == 'start') // Hvis cachen eksisterer, er mindre end 6 timer gammel og ikke i sletningskø, hold den - ellers genopbyg cachen hvis (file_exists ($ cacheFileName) && (time () - filemtime ($ 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=>$ værdi) $ cacheLog [$ key] = 0; file_put_contents ($ cacheLogFile, serialiserer ($ cacheLog));
Disse første funktion, cache, er nøglen til at få vores cache til at fungere. Afhængigt af hvor i din fil du kalder det, opretter funktionen de korrekte filer og mapper, kontrollerer, at en cache skal bygges, og i så fald gemmer udgangen og opdaterer cacheloggen. Funktionen bruger PHP's output buffering til at gemme HTML genereret i en tekstfil.
Den anden funktion bruges til at rense alle cache-filer og er nyttig til at tilføje til eksisterende WordPress-kroge. Med det kan vi gøre det, så vores cache ryddes hver gang vores tema opdateres, et indlæg gemmes eller vores sidebar widgets opdateres ved at tilføje følgende i slutningen af 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 komplet liste over kroge, se venligst WordPress Plugin API Reference.
Konfiguration af sidebjælken
Nu hvor du har funktionerne klar, kan du begynde at cache dit sidebjælke. Åbn din sidebar.php og tilføj denne linje til begyndelsen af filen:
Denne funktion begynder at cache sidebaret, den skal bruge, ellers vil det ikke gøre noget. På grund af den måde, som PHP output bufferfunktionen fungerer, skal vi også lukke bufferen i slutningen af filen. Tilføj denne linje til selve bunden af den samme fil:
Når du har tilføjet disse to linjer, skal du opdatere din blog. Du vil ikke se noget i din browser, men tjek /cache mappe i din tema mappe, og du skal se to filer, der starter med cache-.
Brug af din cache
Nu, hvor du har oprettet din cache-fil, kan du bruge den i ethvert program, der har adgang til det. Du kan nemt gøre dette ved hjælp af include_once funktion, men jeg vil også gerne sørge for, at filen eksisterer, bare for at være sikker:
Bare sørg for at dobbelttjekke din filsti er korrekt. Hvis du vil angive din cache for at slette fra en ekstern applikation, skal du inkludere cache_purge fungere i dit script et eller andet sted og bare ringe til det, når det er nødvendigt. Derefter er det simpelthen et spørgsmål om at kalde funktionen:
Konklusion
Denne teknik er virkelig nyttig til enhver PHP-applikation, især når du vil vise dynamisk indhold uden at skulle ofre præstationer. Brug det til at fremskynde din WordPress-installation eller være i stand til at bruge nyttige bits (som sidebjælken) på et hvilket som helst andet websted eller program.
Redaktørens note: Dette indlæg er skrevet af Monjurul Dolon til Hongkiat.com. Monjurul er en NYC-baseret interface designer og web-udvikler, freelancing sin vej gennem livet. Han blogger på DevGrow.com, hvor han deler tips og ressourcer om webudvikling og design.