Så här visar du WordPress Sidofält på icke-WordPress-webbplatser
Under arbetet med mitt senaste projekt, DevGrow Diskussioner, kom jag över behovet av att bädda in hela WordPress sidfältet på en icke-WordPress-webbplats - speciellt a bbPress forum. Eftersom jag använder olika widgets för att visa populära inlägg och annat dynamiskt innehåll skulle det inte vara tillräckligt att kopiera och klistra in HTML. I slutändan finns det egentligen bara två sätt att gå till detta:
- Inkludera din wp-load.php filen i din ansökan och faktiskt ladda hela WordPress för att få åtkomst till pluginfunktionerna
- Använd enkel cache för att lagra sidofältet i HTML-format och inkludera det i någon annan applikation och bygga om det efter behov när nytt innehåll publiceras
Om det inte är uppenbart nog är det första alternativet mycket dyrt när det gäller databasfrågor och kan sakta ner din webbplats. Det andra alternativet kräver en liten ansträngning i genomförandet men prestationsvis är det ingen konkurrens.
Cachning din WordPress Sidpanel
Innan vi kan skriva vår funktion måste vi förstå exakt vad vi försöker göra. Vårt mål är att cache vår sidofält till en textfil och uppdatera den cachen när vi publicerar ett inlägg, ändra vårt tema eller gör ändringar i sidpanelens widgets. Eftersom vi planerar att använda vår cache för att visa sidfältet i en annan applikation, måste vi enkelt kunna radera cacheminnet utan några skadliga effekter (vi vill inte att vårt sidofält bryts när som helst).
För att uppnå detta effektivt, kommer vi också skapa en logg av våra cachade filer och använd det för att avgöra om cachen ska rensas. Om så är fallet kommer den faktiska cachefilen att skrivas över nästa gång någon besöker WordPress-webbplatsen, så att ett korrekt sidobar alltid görs på båda programmen.
Skapa funktionerna
För att komma igång, öppna ditt tema functions.php fil och lägg till följande funktioner för den:
funktion cache ($ uppgift, $ cacheFile, $ cacheTime = 21600) global $ cache; // Konfigurera filer och kataloger: $ cacheDir = TEMPLATEPATH. "/ Cache"; $ cacheFileName = $ cacheDir. "/ cache- $ cacheFile.txt"; $ cacheLogFile = $ cacheDir. "/ cache-log.txt"; // Gör cachemappen om den inte existerar om (! Is_dir ($ cacheDir)) mkdir ($ cacheDir, 0755); // Skapa en logg av cachefilerna med deras nuvarande status om (file_exists ($ cacheLogFile)) $ cacheLog = unserialize (file_get_contents ($ cacheLogFile)); annars $ cacheLog = array (); om $ task == 'start') // Om cachen existerar, är mindre än 6 timmar gammal och inte i raderingskö, behåll den - annars bygga om cache om (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ärde) $ cacheLog [$ key] = 0; file_put_contents ($ cacheLogFile, serialisera ($ cacheLog));
Dessa första funktionen, cache, är nyckeln till att få vår cache att fungera. Beroende på var i din fil du kallar det, kommer funktionen att ställa in rätt filer och kataloger, verifiera att en cache behöver byggas och i så fall sparar utmatningen och uppdaterar cacheringsloggen. Funktionen använder PHPs buffert för att spara vilken HTML som genereras i en textfil.
Den andra funktionen används för att rensa alla cachefiler och är användbar för att lägga till befintliga WordPress-krokar. Med det kan vi göra det så att vår cache rensas varje gång vårt tema uppdateras, ett inlägg sparas eller våra sidfält widgets uppdateras genom att lägga till följande i slutet 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);
För en fullständig lista med krokar, kolla in WordPress Plugin API Referens.
Konfigurera sidofältet
Nu när du har funktionerna klara, kan du börja cache ditt sidofält. Öppna din sidebar.php och lägg till den här raden i början av filen:
Den här funktionen börjar cachera sidfältet den behöver, annars gör det ingenting. På grund av hur PHP-buffertfunktionen fungerar, måste vi också stänga av bufferten i slutet av filen också. Lägg till den här raden längst ner i samma fil:
När du har lagt till de två raderna, uppdatera din blogg. Du kommer inte se någonting i din webbläsare men kontrollera / cache katalog i temakartan och du bör se två filer som börjar med cache-.
Använda din cache
Nu när du har skapat din cachefil kan du använda den i alla program som har åtkomst till det. Du kan enkelt göra detta med hjälp av include_once funktion men jag gillar också att se till att filen existerar, bara för att vara säker:
Var noga med att dubbelkontrollera att din sökväg är korrekt. Om du vill ställa in din cache för att ta bort från en extern applikation måste du inkludera cache_purge Fungera i ditt skript någonstans och ring bara det när det behövs. Efter det handlar det bara om att ringa funktionen:
Slutsats
Denna teknik är verkligen användbar för alla PHP-applikationer, speciellt när du vill visa dynamiskt innehåll utan att behöva offra prestanda. Använd det för att påskynda ditt WordPress-installationsprogram eller kunna använda användbara bitar (som sidofältet) på någon annan webbplats eller applikation.
Redaktörens anteckning: Det här inlägget är skrivet av Monjurul Dolon för Hongkiat.com. Monjurul är en NYC-baserad gränssnittsdesigner och webbutvecklare som frilansar sin väg genom livet. Han bloggar på DevGrow.com, där han delar tips och resurser om webbutveckling och design.