Kako prikazati WordPress bočnu traku na ne-WordPress web stranicama
Dok sam radio na svom zadnjem projektu, DevGrow Discussions, naišao sam na potrebu ugradite cijelu WordPress bočnu traku na ne-WordPress stranicu - posebno a bbPress forum. Budući da koristim razne widgete za prikaz popularnih postova i drugih dinamičkih sadržaja, jednostavno kopiranje i lijepljenje HTML-a ne bi bilo dovoljno. Na kraju, zapravo postoje samo dva načina da se to uradi:
- Uključite svoj wp-load.php datoteku u vašoj aplikaciji i zapravo učitajte cijelu WordPress da biste dobili pristup funkcijama dodataka
- Koristite jednostavno predmemoriranje da biste spremili bočnu traku u HTML formatu i uključili je u bilo koju drugu aplikaciju, a zatim je obnovite prema potrebi kada se objavi novi sadržaj
Ako to nije dovoljno jasno, prva opcija je vrlo skupa u smislu upita za bazu podataka i može značajno usporiti vašu web-lokaciju. Druga opcija zahtijeva malo truda u provedbi, ali izvedbe nema konkurencije.
Caching Vašu WordPress Sidebar
Prije nego što možemo napisati svoju funkciju, moramo točno shvatiti što pokušavamo učiniti. Naš je cilj predmemorirajte našu sidebar u tekstualnu datoteku i ažurirajte tu cache kad god objavimo post, promijenite temu ili napravite izmjene widgeta na bočnoj traci. Budući da planiramo koristiti našu predmemoriju da bi prikazali bočnu traku na drugoj aplikaciji, moramo biti u mogućnosti jednostavno izbrisati predmemoriju bez ikakvih loših učinaka (ne želimo da se bočna traka u bilo kojem trenutku pokvari).
Da bismo to postigli učinkovito, također stvorite dnevnik naših spremljenih datoteka i koristite to da biste utvrdili treba li izbrisati predmemoriju. Ako je tako, stvarna datoteka predmemorije bit će prepisana sljedeći put kada netko posjeti WordPress web-lokaciju, osiguravajući da se uvijek prikazuje odgovarajuća bočna traka na obje aplikacije.
Stvaranje funkcija
Da biste započeli, otvorite temu functions.php datoteku i dodajte joj sljedeće funkcije:
cache funkcije ($ task, $ cacheFile, $ cacheTime = 21600) globalni $ cache; // Konfiguriranje datoteka i direktorija: $ cacheDir = TEMPLATEPATH. "/ Cache"; $ cacheFileName = $ cacheDir. "/ cache- $ cacheFile.txt"; $ cacheLogFile = $ cacheDir. "/ cache-log.txt"; // Izradimo direktorij predmemorije ako ne postoji (! Is_dir ($ cacheDir)) mkdir ($ cacheDir, 0755); // Napravite zapisnik datoteka predmemorije s njihovim trenutnim statusom (file_exists ($ cacheLogFile)) $ cacheLog = unserialize (file_get_contents ($ cacheLogFile)); else $ cacheLog = array (); if ($ task == 'start') // Ako postoje predmemorije, ima manje od 6 sati i nije u redu za brisanje, zadržite ga - u suprotnom obnovite cache ako (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=>$ value) $ cacheLog [$ key] = 0; file_put_contents ($ cacheLogFile, serijalizacija ($ cacheLog));
Ovo prvo funkcionira, predmemorija, je ključ za rad našeg cache-a. Ovisno o tome gdje se u datoteci zovete, funkcija će postaviti ispravne datoteke i direktorije, provjeriti je li predmemorija potrebna za izgradnju i ako je tako, spremit će izlaz i ažurirati dnevnik privremene memorije. Funkcija koristi PHP izlazni međuspremnik za spremanje bilo kojeg HTML generiranog u tekstualnu datoteku.
Druga funkcija se koristi za čišćenje svih datoteka predmemorije i korisna je za dodavanje postojećih WordPress kuka. Pomoću njega možemo napraviti da se naša predmemorija briše svaki put kad se ažurira naša tema, da se objavi post ili da se widgeti na bočnoj traci ažuriraju dodavanjem sljedećeg na kraju functions.php:
add_action ('switch_theme', 'cache_purge', 10); add_action ('publication_post', 'cache_purge', 10); add_filter ('widget_update_callback', 'cache_purge', 10);
Za potpuni popis udica, pogledajte WordPress Plugin API Reference.
Konfiguriranje Sidebara
Sada kada su vam funkcije spremne, možete početi spremati svoju bočnu traku. Otvorite svoj sidebar.php i dodajte ovaj redak na početak datoteke:
Ova funkcija će početi keširati bočnu traku koju treba, inače neće učiniti ništa. Zbog načina na koji funkcionira funkcija izlaznog bufferiranja u PHP-u, također moramo zatvoriti i međuspremnik na kraju datoteke. Dodajte ovaj red na samom dnu iste datoteke:
Nakon što dodate te dvije linije, osvježite svoj blog. Nećete vidjeti ništa u pregledniku, ali provjerite / predmemorija direktorij u mapi teme i trebali biste vidjeti dvije datoteke počevši od predmemorija-.
Korištenje predmemorije
Sada kada ste stvorili datoteku predmemorije, možete je koristiti u bilo kojoj aplikaciji koja ima pristup njoj. To možete jednostavno učiniti pomoću include_once funkcija, ali isto tako želim provjeriti postoji li datoteka, samo da bi bila sigurna:
Samo provjerite je li put datoteke ispravan. Ako želite postaviti predmemoriju da se izbriše iz vanjske aplikacije, morat ćete uključiti cache_purge negdje funkcionirati u skripti i jednostavno to nazvati kad god je potrebno. Nakon toga to je jednostavno pitanje poziva funkcije:
Zaključak
Ova tehnika je stvarno korisna za bilo koju PHP aplikaciju, pogotovo kada želite prikazati dinamički sadržaj bez žrtvovanja izvedbe. Koristite ga da biste ubrzali instalaciju programa WordPress ili mogli koristiti korisne bitove (poput sidebara) na bilo kojoj drugoj web-lokaciji ili aplikaciji.
Napomena urednika: Ovaj post je napisao / la Monjurul Dolon za Hongkiat.com. Monjurul je dizajner sučelja i web developer koji se temelji na NYC-u, slobodno prodirući kroz život. On blogova na DevGrow.com, gdje dijeli savjete i resurse o razvoju i dizajnu weba.