Jak wyświetlić pasek boczny WordPress na stronach innych niż WordPress
Podczas pracy nad moim najnowszym projektem, DevGrow Discussions, natknąłem się na potrzebę osadzić cały mój pasek boczny WordPress na stronie innej niż WordPress - konkretnie a forum bbPress. Ponieważ używam różnych widżetów do wyświetlania popularnych postów i innych dynamicznych treści, po prostu skopiowanie i wklejenie HTML nie wystarczy. W końcu istnieją tylko dwa sposoby na to:
- Dołącz swoje wp-load.php plik w aplikacji i w efekcie ładuje cały WordPress, aby uzyskać dostęp do funkcji wtyczki
- Użyj prostego buforowania, aby zapisać pasek boczny w formacie HTML i dołączyć go do dowolnej innej aplikacji, a następnie odbuduj w razie potrzeby po opublikowaniu nowej zawartości
Jeśli nie jest to wystarczająco oczywiste, pierwsza opcja jest bardzo kosztowna pod względem zapytań do bazy danych i może znacznie spowolnić działanie witryny. Druga opcja wymaga trochę wysiłku przy wdrażaniu, ale pod względem wydajności nie ma konkurencji.
Buforowanie paska bocznego WordPress
Zanim będziemy mogli napisać naszą funkcję, musimy dokładnie zrozumieć, co próbujemy zrobić. Naszym celem jest buforuj nasz pasek boczny do pliku tekstowego i aktualizuj tę pamięć podręczną za każdym razem, gdy publikujemy post, zmień nasz motyw lub wprowadź zmiany w widżetach paska bocznego. Ponieważ planujemy używać naszej pamięci podręcznej do wyświetlania paska bocznego na innej aplikacji, musimy mieć możliwość łatwego usunięcia pamięci podręcznej bez żadnych złych efektów (nie chcemy, aby nasz pasek boczny został w każdej chwili przerwany).
Aby to osiągnąć efektywnie, my również utwórz dziennik naszych buforowanych plików i użyj tego, aby określić, czy pamięć podręczna powinna zostać wyczyszczona. Jeśli tak, rzeczywisty plik pamięci podręcznej zostanie zastąpiony następnym razem, gdy ktoś odwiedzi witrynę WordPress, zapewniając, że odpowiedni pasek boczny jest zawsze renderowany w obu aplikacjach.
Tworzenie funkcji
Aby rozpocząć, otwórz motyw functions.php plik i dodaj do niego następujące funkcje:
cache funkcji ($ task, $ cacheFile, $ cacheTime = 21600) global $ cache; // Konfiguracja plików i katalogów: $ cacheDir = TEMPLATEPATH. "/ Cache"; $ cacheFileName = $ cacheDir. "/ cache- $ cacheFile.txt"; $ cacheLogFile = $ cacheDir. "/ cache-log.txt"; // Utwórz katalog pamięci podręcznej, jeśli nie istnieje if (! Is_dir ($ cacheDir)) mkdir ($ cacheDir, 0755); // Utwórz dziennik plików pamięci podręcznej z ich aktualnym stanem if (file_exists ($ cacheLogFile)) $ cacheLog = unserialize (file_get_contents ($ cacheLogFile)); else $ cacheLog = array (); if ($ task == 'start') // Jeśli pamięć podręczna istnieje, ma mniej niż 6 godzin i nie znajduje się w kolejce usuwania, zachowaj ją - w przeciwnym razie przebuduj pamięć podręczną jeśli (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, serialize ($ cacheLog));
Te pierwsze funkcje, Pamięć podręczna, jest kluczem do działania naszej pamięci podręcznej. W zależności od tego, w którym miejscu pliku go wywołujesz, funkcja skonfiguruje właściwe pliki i katalogi, zweryfikuje, czy pamięć podręczna musi zostać zbudowana, a jeśli tak, zapisze dane wyjściowe i zaktualizuje dziennik pamięci podręcznej. Funkcja wykorzystuje buforowanie wyjścia PHP, aby zapisać dowolny wygenerowany kod HTML w pliku tekstowym.
Druga funkcja służy do usuwania wszystkich plików pamięci podręcznej i jest przydatna do dodawania do istniejących haków WordPress. Dzięki niemu możemy sprawić, aby nasza pamięć podręczna była czyszczona za każdym razem, gdy nasz motyw jest aktualizowany, post jest zapisywany lub nasze widgety paska bocznego są aktualizowane przez dodanie następujących elementów na końcu functions.php:
add_action ('switch_theme', 'cache_purge', 10); add_action ('publication_post', 'cache_purge', 10); add_filter ('widget_update_callback', 'cache_purge', 10);
Pełna lista haków znajduje się w podręczniku API wtyczki WordPress.
Konfigurowanie paska bocznego
Teraz, gdy masz już gotowe funkcje, możesz rozpocząć buforowanie paska bocznego. Otwórz swoje sidebar.php i dodaj ten wiersz na początku pliku:
Ta funkcja rozpocznie buforowanie paska bocznego, którego potrzebuje, w przeciwnym razie nic nie zrobi. Ze względu na sposób, w jaki działa funkcja buforowania wyjścia PHP, musimy także zamknąć bufor na końcu pliku. Dodaj ten wiersz na samym dole tego samego pliku:
Po dodaniu tych dwóch linii odśwież swój blog. Nic nie zobaczysz w przeglądarce, ale sprawdź /Pamięć podręczna katalog w folderze motywu i powinieneś zobaczyć dwa pliki zaczynające się od Pamięć podręczna-.
Korzystanie z pamięci podręcznej
Po utworzeniu pliku pamięci podręcznej można go użyć w dowolnej aplikacji, która ma do niego dostęp. Możesz to łatwo zrobić za pomocą include_once funkcja, ale lubię też upewnić się, że plik istnieje, tylko po to, by być bezpiecznym:
Po prostu sprawdź poprawność ścieżki pliku. Jeśli chcesz, aby pamięć podręczna została usunięta z zewnętrznej aplikacji, musisz dołączyć cache_purge funkcjonować gdzieś w skrypcie i po prostu wywoływać to w razie potrzeby. Po prostu jest to kwestia wywołania funkcji:
Wniosek
Ta technika jest naprawdę przydatna dla każdej aplikacji PHP, zwłaszcza gdy chcesz wyświetlać dynamiczną zawartość bez konieczności poświęcania wydajności. Użyj go, aby przyspieszyć instalację WordPressa lub móc użyć przydatnych bitów (takich jak pasek boczny) na dowolnej innej stronie lub aplikacji.
Nota redaktora: Ten wpis jest napisany przez Monjurul Dolon dla Hongkiat.com. Monjurul jest nowojorskim projektantem interfejsów i programistą stron internetowych, freelancing swoją drogę przez życie. Bloguje na DevGrow.com, gdzie dzieli się wskazówkami i zasobami na temat tworzenia i projektowania stron internetowych.