WordPress-sivupalkin näyttäminen ei-WordPress-sivustoilla
Työskennellessäni viimeisintä projektiani, DevGrow-keskustelut, minulla oli tarve upota koko WordPress-sivupalkki ei-WordPress-sivustoon - erityisesti a bbPress-foorumi. Koska käytän erilaisia widgetejä suosittujen viestien ja muun dynaamisen sisällön näyttämiseen, HTML: n kopioiminen ja liittäminen ei riitä. Loppujen lopuksi on olemassa vain kaksi tapaa edetä tähän:
- Sisällytä WP-load.php tiedosto hakemuksessasi ja tosiasiallisesti lataa koko WordPress, jotta pääset käyttämään laajennustoimintoja
- Käytä yksinkertaista välimuistia tallentaaksesi sivupalkin HTML-muotoon ja sisällyttämällä sen mihin tahansa muuhun sovellukseen, ja asenna se tarvittaessa uudelleen, kun uusi sisältö julkaistaan
Jos se ei ole riittävän ilmeinen, ensimmäinen vaihtoehto on erittäin kallista tietokantakyselyjen kannalta ja voi merkittävästi hidastaa sivustoasi. Toinen vaihtoehto vaatii vähän vaivaa toteutuksessa, mutta suorituskyky ei ole kilpailua.
WordPress-sivupalkin välimuisti
Ennen kuin voimme kirjoittaa toimintamme, meidän on ymmärrettävä, mitä me yritämme tehdä. Tavoitteenamme on välimuisti sivupalkkimme tekstitiedostoon ja päivitä välimuisti aina, kun julkaisemme viestin, muuttaa teemaa tai tehdä muutoksia sivupalkin widgeteihin. Koska aiomme käyttää välimuistiamme näyttämään sivupalkin eri sovelluksessa, meidän on pystyttävä poistamaan välimuisti helposti ilman mitään huonoja vaikutuksia (emme halua sivupalkkiamme milloin tahansa).
Saavuttaaksemme tämän tehokkaasti, myös luo loki välimuistissa olevista tiedostoista ja käytä sitä selvittääksesi, olisiko välimuisti tyhjennettävä. Jos näin on, todellinen välimuistitiedosto korvataan seuraavan kerran, kun joku vierailee WordPress-sivustossa ja varmistaa, että molemmissa sovelluksissa annetaan aina oikea sivupalkki.
Toimintojen luominen
Voit aloittaa teeman avaamisen functions.php tiedosto ja lisää siihen seuraavat toiminnot:
funktion välimuisti ($ task, $ cacheFile, $ cacheTime = 21600) global $ cache; // Määritä tiedostot ja hakemistot: $ cacheDir = TEMPLATEPATH. "/ Cache"; $ cacheFileName = $ cacheDir. "/ cache- $ cacheFile.txt"; $ cacheLogFile = $ cacheDir. "/ cache-log.txt"; // Tee välimuistihakemisto, jos sitä ei ole, jos (! Is_dir ($ cacheDir)) mkdir ($ cacheDir, 0755); // Tee lokitiedosto välimuistitiedostoista, joiden nykyinen tila on (file_exists ($ cacheLogFile)) $ cacheLog = unserialize (file_get_contents ($ cacheLogFile)); muu $ cacheLog = array (); jos ($ task == 'start') // Jos välimuisti on olemassa, se on alle 6 tuntia vanha eikä sitä ole poistettu jonossa, säilytä se - muuten palauta välimuisti, jos (file_exists ($ cacheFileName) && (aika () - 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=>$ value) $ cacheLog [$ key] = 0; file_put_contents ($ cacheLogFile, sarjoittaa ($ cacheLog));
Nämä ensimmäiset toiminnot, kätkö, on avain, jotta välimuisti saadaan toimimaan. Riippuen siitä, missä tiedostossa sitä kutsutaan, toiminto määrittää oikeat tiedostot ja hakemistot, tarkistaa, että välimuisti on rakennettava, ja jos näin on, tallentaa lähdön ja päivittää välimuistilokin. Funktio käyttää PHP: n lähtöpuskurointia tallentamaan minkä tahansa HTML-tiedoston, joka on luotu tekstitiedostoon.
Toista toimintoa käytetään kaikkien välimuistitiedostojen puhdistamiseen ja on hyödyllistä lisätä olemassa olevia WordPress-koukkuja. Sen avulla voimme tehdä sen niin, että välimuisti tyhjennetään aina, kun teema päivitetään, viesti tallennetaan tai sivupalkin widgetit päivitetään lisäämällä seuraavat tiedot loppuun functions.php:
add_action ('switch_theme', 'cache_purge', 10); add_action ('public_post', 'cache_purge', 10); add_filter ('widget_update_callback', 'cache_purge', 10);
Täydellinen luettelo koukkuista on WordPress Plugin API -ohjeessa.
Sivupalkin määrittäminen
Nyt kun olet valmis toimimaan, voit aloittaa sivupalkin välimuistin. Avaa sidebar.php ja lisää tämä rivi tiedoston alkuun:
Tämä toiminto käynnistää välimuistin sivupalkissa, jota se tarvitsee, muuten se ei tee mitään. Koska PHP-tulostuspuskurointitoiminto toimii, meidän on myös suljettava puskuri myös tiedoston lopussa. Lisää tämä rivi saman tiedoston alareunaan:
Kun olet lisännyt nämä kaksi riviä, päivitä blogiisi. Et näe mitään selaimessasi, mutta tarkista /kätkö teeman kansiossa oleva hakemisto ja sinun pitäisi nähdä kaksi tiedostoa alkaen kätkö-.
Välimuistin käyttäminen
Nyt kun olet luonut välimuistitiedoston, voit käyttää sitä missä tahansa sovelluksessa, jolla on siihen pääsy. Voit tehdä tämän helposti käyttämällä include_once toiminto, mutta haluan myös varmistaa, että tiedosto on olemassa, vain olla turvallinen:
Tarkista vain, että tiedoston polku on oikea. Jos haluat asettaa välimuistin poistettavaksi ulkoisesta sovelluksesta, sinun on sisällytettävä cache_purge toimi skriptissasi jossain muualla ja soita vain tarvittaessa. Sen jälkeen on yksinkertaisesti kysymys toiminnon kutsumisesta:
johtopäätös
Tämä tekniikka on todella hyödyllinen kaikille PHP-sovelluksille, varsinkin kun haluat näyttää dynaamisen sisällön ilman, että sinun täytyy uhrata suorituskykyä. Käytä sitä nopeuttamaan WordPress-asennusta tai käyttämään hyödyllisiä bittejä (kuten sivupalkkia) muilla verkkosivuilla tai sovelluksissa.
Toimittajan huomautus: Tämä viesti on kirjoittanut Monjurul Dolon varten Hongkiat.com. Monjurul on NYC-pohjainen käyttöliittymän suunnittelija ja web-kehittäjä. Hän blogeja osoitteessa DevGrow.com, jossa hän jakaa vinkkejä ja resursseja web-kehitykseen ja suunnitteluun.