Cara Paparkan Sidebar WordPress pada Laman Web Bukan-WordPress
Semasa mengerjakan projek terbaharu saya, Perbincangan DevGrow, saya merasakan keperluan untuk membenamkan sidebar WordPress keseluruhan saya pada laman bukan WordPress - khusus a forum bbPress. Oleh kerana saya menggunakan pelbagai widget untuk memaparkan siaran popular dan kandungan dinamik yang lain, hanya menyalin dan menyisipkan HTML tidak akan cukup. Akhirnya, hanya ada dua cara untuk melakukan ini:
- Sertakan anda wp-load.php fail dalam aplikasi anda dan secara efektif memuatkan keseluruhan WordPress untuk mendapatkan akses kepada fungsi plugin
- Gunakan cache mudah untuk menyimpan sidebar dalam format HTML dan masukkannya dalam sebarang aplikasi lain, kemudian kembalikan semula seperti yang diperlukan apabila kandungan baru diterbitkan
Sekiranya ia tidak cukup jelas, pilihan pertama adalah sangat mahal dari segi pertanyaan pangkalan data dan boleh memperlahankan laman web anda dengan ketara. Pilihan kedua memerlukan sedikit usaha dalam pelaksanaan tetapi prestasi bijak tidak ada persaingan.
Caching Sidebar WordPress anda
Sebelum kita dapat menulis fungsi kita, kita perlu memahami dengan tepat apa yang kita cuba lakukan. Matlamat kami adalah untuk cache sidebar kami ke fail teks dan kemas kini cache apabila kita menerbitkan pos, menukar tema kami atau membuat perubahan kepada widget bar sisi. Oleh kerana kami merancang untuk menggunakan cache kami untuk memaparkan sidebar pada aplikasi yang berbeza, kami perlu dapat memadamkan cache dengan mudah tanpa apa-apa kesan buruk (kami tidak mahu sidebar kami patah pada bila-bila masa).
Untuk mencapai ini dengan cekap, kami juga akan buat log fail cache kami dan gunakannya untuk menentukan sama ada cache perlu dibersihkan. Jika ya, fail cache sebenar akan ditimpa semula pada masa yang lain seseorang melawat laman WordPress, memastikan sidebar yang betul sentiasa diberikan pada kedua-dua aplikasi.
Mewujudkan Fungsi
Untuk bermula, buka tema anda functions.php fail dan tambah fungsi berikut:
cache fungsi ($ tugas, $ cacheFile, $ cacheTime = 21600) global cache $; // Mengkonfigurasi fail dan direktori: $ cacheDir = TEMPLATEPATH "/ cache"; $ cacheFileName = $ cacheDir. "/ cache- $ cacheFile.txt"; $ cacheLogFile = $ cacheDir. "/ cache-log.txt"; / / Buat direktori cache jika ia tidak wujud jika (! Is_dir ($ cacheDir)) mkdir ($ cacheDir, 0755); // Buat log fail cache dengan status semasa mereka jika (file_exists ($ cacheLogFile)) $ cacheLog = unserialize (file_get_contents ($ cacheLogFile)); lain $ cacheLog = array (); jika ($ task == 'start') // Jika cache ada, kurang daripada 6 jam dan tidak dalam giliran penghapusan, simpannya - jika tidak, buat semula cache jika (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=>$ nilai) $ cacheLog [$ key] = 0; file_put_contents ($ cacheLogFile, serialize ($ cacheLog));
Fungsi pertama ini, cache, adalah kunci untuk mendapatkan cache kami berfungsi. Bergantung pada di mana dalam fail anda anda memanggilnya, fungsi itu akan menyediakan fail dan direktori yang betul, mengesahkan keperluan cache untuk dibina dan jika ya, akan menyimpan output dan mengemas kini log cache. Fungsi ini menggunakan buffering output PHP untuk menyimpan sebarang HTML yang dihasilkan ke dalam fail teks.
Fungsi kedua digunakan untuk membersihkan semua fail cache dan berguna untuk menambah cangkuk WordPress yang sedia ada. Dengan itu, kami boleh membuatnya supaya cache kami dibersihkan setiap kali tema kami dikemas kini, jawatan disimpan atau widget sidebar kami dikemas kini dengan menambah yang berikut pada akhir functions.php:
add_action ('switch_theme', 'cache_purge', 10); add_action ('publish_post', 'cache_purge', 10); add_filter ('widget_update_callback', 'cache_purge', 10);
Untuk senarai penuh cangkuk, lihat Rujukan API Plugin WordPress.
Mengkonfigurasi Sidebar Anda
Sekarang anda mempunyai fungsi siap, anda boleh memulakan caching bar sisi anda. Buka bukaan anda sidebar.php dan tambah baris ini ke permulaan fail:
Fungsi ini akan mula caching sidebar yang diperlukan, jika tidak, ia tidak akan melakukan apa-apa. Kerana cara berfungsi buffering output PHP, kita juga perlu menutup penyangga pada akhir fail juga. Tambahkan baris ini ke bahagian paling bawah fail yang sama:
Selepas anda menambah dua baris tersebut, muat semula blog anda. Anda tidak akan melihat apa-apa dalam pelayar anda tetapi semak / cache direktori dalam folder tema anda dan anda akan melihat dua fail bermula dengan cache-.
Menggunakan Cache Anda
Sekarang bahawa anda telah mencipta fail cache anda, anda boleh menggunakannya dalam sebarang aplikasi yang mempunyai akses kepadanya. Anda boleh melakukannya dengan mudah menggunakan include_once fungsi tetapi saya juga suka memastikan fail wujud, hanya untuk selamat:
Pastikan anda menyemak semula laluan fail anda betul. Jika anda ingin menetapkan cache anda untuk dipadamkan dari aplikasi luaran, anda perlu menyertakannya cache_purge berfungsi dalam skrip anda di suatu tempat dan hanya memanggilnya bila perlu. Selepas itu ia hanya memanggil fungsi:
Kesimpulannya
Teknik ini benar-benar berguna untuk aplikasi PHP mana-mana, terutamanya apabila anda ingin memaparkan kandungan dinamik tanpa perlu mengorbankan prestasi. Gunakannya untuk mempercepat pemasangan WordPress anda atau dapat menggunakan bit berguna (seperti sidebar) di mana-mana laman web atau aplikasi lain.
Nota editor: Jawatan ini ditulis oleh Monjurul Dolon untuk Hongkiat.com. Monjurul adalah pereka antara muka berasaskan NYC dan pemaju web, melancarkan jalannya melalui kehidupan. Dia blog di DevGrow.com, di mana dia berkongsi tip dan sumber dalam pembangunan dan reka bentuk web.