Как да се покаже WordPress страничната лента на не-WordPress сайтове
Докато работех по последния си проект, DevGrow Discussions, се натъкнах на необходимостта вградите цялата ми странична лента на WordPress на сайт, който не е в WordPress - специално a bbPress форум. Тъй като използвам различни приспособления за показване на популярни публикации и друго динамично съдържание, просто копирането и поставянето на HTML не е достатъчно. В крайна сметка има само два начина за това:
- Включете WP-load.php файл във вашето приложение и в действителност заредете цялата WordPress, за да получите достъп до функциите на плъгина
- Използвайте просто кеширане, за да съхраните страничната лента в HTML формат и да я включите във всяко друго приложение, след което да го възстановите, когато е необходимо, когато се публикува ново съдържание
Ако това не е достатъчно очевидно, първата опция е много скъпа по отношение на заявките за база данни и може значително да забави сайта ви. Вторият вариант изисква малко усилия в изпълнението, но по отношение на ефективността няма конкуренция.
Кеширане на страничната лента на WordPress
Преди да можем да напишем нашата функция, трябва да разберем точно какво се опитваме да направим. Нашата цел е да кеш нашата странична лента в текстов файл и актуализирайте кеша всеки път, когато публикуваме публикация, променете нашата тема или направете промени в джаджите на страничната лента. Тъй като планираме да използваме кеша си, за да показваме страничната лента на друго приложение, трябва лесно да изтриваме кеша без никакви лоши ефекти (не искаме страничната ни лента да е счупена по всяко време).
За да постигнем това ефективно, ние също създайте дневник на нашите кеширани файлове и използвайте това, за да определите дали кешът трябва да бъде изчистен. Ако е така, действителният кеш файл ще бъде презаписан следващия път, когато някой посети сайта на WordPress, като гарантира, че винаги се показва подходяща странична лента и в двете приложения..
Създаване на функциите
За да започнете, отворете вашата тема functions.php файл и добавете към него следните функции:
cache ($ task, $ cacheFile, $ cacheTime = 21600) global $ cache; // Конфигуриране на файлове и директории: $ cacheDir = TEMPLATEPATH. "/ Cache"; $ cacheFileName = $ cacheDir. "/ cache- $ cacheFile.txt"; $ cacheLogFile = $ cacheDir. "/ cache-log.txt"; // Направете кеш директория, ако не съществува, ако (! Is_dir ($ cacheDir)) mkdir ($ cacheDir, 0755); // Направете лог на кеш файловете с тяхното текущо състояние, ако (file_exists ($ cacheLogFile)) $ cacheLog = unserialize (file_get_contents ($ cacheLogFile)); else $ cacheLog = array (); if ($ task == 'start') // Ако съществува кеш, е по-малко от 6 часа и не е в опашката за изтриване, запазете го - в противен случай възстановете кеша, ако (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 [$ ключ] = 0; file_put_contents ($ cacheLogFile, Сериализирането ($ cacheLog));
Това е първата функция, скривалище, е ключът към работата на нашия кеш. В зависимост от това къде в файла ви го наричате, функцията ще настрои правилните файлове и директории, ще провери дали трябва да се изгради кеш и ако е така, ще запази изхода и ще актуализира кеша. Функцията използва изходната буферизация на PHP, за да запише всеки HTML генериран в текстов файл.
Втората функция се използва за прочистване на всички кеш файлове и е полезна за добавяне към съществуващите куки на WordPress. С него можем да направим така, че кешът ни да се изчиства всеки път, когато актуализираме темата си, да се запази публикация или да се актуализират приспособленията ни в страничната лента, като се добави следното в края на functions.php:
add_action ('switch_theme', 'cache_purge', 10); add_action ('publish_post', 'cache_purge', 10); add_filter ('widget_update_callback', 'cache_purge', 10);
За пълен списък на куките, вижте WordPress Plugin API Reference.
Конфигуриране на страничната лента
Сега, когато имате готови функции, можете да започнете да кеширате страничната лента. Отворете си sidebar.php и добавете този ред в началото на файла:
Тази функция ще започне да кешира страничната лента, от която се нуждае, в противен случай няма да направи нищо. Поради начина, по който функционира функцията за извеждане на буфериране в PHP, ние също трябва да затворим буфера в края на файла. Добавете този ред в най-долната част на същия файл:
След като добавите тези два реда, обновете блога си. Няма да виждате нищо в браузъра си, но проверете / кеш директорията във вашата папка с теми и трябва да видите два файла, започващи с скривалище-.
Използване на кеша
Сега, след като сте създали кеш файла, можете да го използвате във всяко приложение, което има достъп до него. Лесно можете да направите това, като използвате include_once функция, но също така искам да се уверя, че файлът съществува, само за да е безопасен:
Просто бъдете сигурни, че сте проверили правилно пътя на файла. Ако искате да зададете изтриването на кеша от външно приложение, трябва да включите cache_purge функцията в скрипта ви някъде и просто се обадете, когато е необходимо. След това е просто въпрос на извикване на функцията:
заключение
Тази техника е наистина полезна за всяко приложение на PHP, особено когато искате да показвате динамично съдържание, без да се налага да жертвате производителността. Използвайте го, за да ускорите инсталирането на WordPress или да можете да използвате полезни битове (като страничната лента) на всеки друг уебсайт или приложение.
Бележка на редактора: Тази публикация е написана от Monjurul Dolon за Hongkiat.com. Monjurul е дизайнер на интерфейси в Ню Йорк и уеб разработчик, който свободно преживява живота си. Той блогове в DevGrow.com, където той споделя съвети и ресурси за уеб разработка и дизайн.