Як відобразити бічну панель 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 () - файл часу) ($ 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, serialize ($ cacheLog));
Це спочатку функція, кеш, є ключем до роботи нашого кешу. Залежно від того, де у вашому файлі ви його називаєте, функція буде налаштовувати правильні файли та каталоги, перевіряти необхідність створення кешу та, якщо так, зберігатиме вивід та оновлювати журнал кешу. Функція використовує вихідну буферизацію PHP, щоб зберегти будь-який HTML-код, створений у текстовому файлі.
Друга функція використовується для очищення всіх файлів кешу і корисна для додавання до існуючих гачків WordPress. З його допомогою ми можемо зробити так, щоб наш кеш очищався кожного разу, коли наша тема оновлюється, публікація буде збережена або наші віджети на бічній панелі буде оновлено, додавши наступні в кінці functions.php:
add_action ('switch_theme', 'cache_purge', 10); add_action ('publication_post', 'cache_purge', 10); add_filter ('widget_update_callback', 'cache_purge', 10);
Повний список гачків можна знайти у довіднику API плагінів WordPress.
Налаштування бічної панелі
Тепер, коли у вас є готові функції, ви можете почати кешувати бічну панель. Відкрийте свій sidebar.php та додайте цей рядок до початку файлу:
Ця функція почне кешувати бічну панель, в якій вона має бути, інакше вона нічого не зробить. Через те, як функція вихідної буферизації PHP працює, нам також потрібно закрити буфер в кінці файлу. Додайте цей рядок до самого нижнього краю файлу:
Після додавання цих двох рядків оновіть свій блог. Ви не побачите нічого в своєму веб-переглядачі, але перевірте / cache в папці теми, і ви повинні побачити два файли, починаючи з кеш-.
Використання кешу
Тепер, коли ви створили свій файл кешу, ви можете використовувати його в будь-якій програмі, яка має доступ до неї. Ви можете легко зробити це за допомогою include_once функція, але я також хочу переконатися, що файл існує, просто щоб бути безпечним:
Просто обов'язково перевірте правильність шляху файлу. Якщо ви хочете встановити кеш для видалення з зовнішньої програми, вам доведеться включити cache_purge функцію у вашому скрипті де-небудь і просто викликайте це, коли це необхідно. Після цього потрібно просто викликати функцію:
Висновок
Ця методика дійсно корисна для будь-якої програми PHP, особливо якщо ви хочете відображати динамічний вміст без необхідності жертвувати продуктивністю. Використовуйте його для прискорення інсталяції WordPress або використання корисних бітів (наприклад, бічної панелі) на будь-якому іншому веб-сайті або програмі.
Примітка редактора: Цей пост написано Монжурул Долон для Hongkiat.com. Monjurul - дизайнер інтерфейсів у Нью-Йорку та веб-розробник, що вільно просувається через життя. Він блогів на DevGrow.com, де він поділяє поради та ресурси на веб-розробку та дизайн.