Saya telah datang dengan solusi sementara untuk tidak persis umum, tetapi jauh dari masalah yang belum pernah terjadi sebelumnya dengan interaksi solusi caching WP populer dengan cookie, dalam hal ini cookie komentar WP standar. Solusi saya juga mendukung pengecualian "pengguna terkenal" yang jarang didefinisikan untuk melayani file dalam cache. Apakah itu dapat digunakan atau tidak, saya pikir itu menjelaskan dan mungkin belajar mengapa itu ide yang buruk mungkin secara umum bersifat instruktif.
Saya telah menguji metode saya dengan WP Super Cache, W3 Total Cache, dan Comet Cache. Salah satu yang saya uraikan sendiri secara detail saat mempelajari masalah ini adalah WP Super Cache ("WPSC" selanjutnya), jadi saya akan menggunakannya sebagai contoh utama saya.
LATAR BELAKANG
Ketika utas komentar standar WP diatur untuk memungkinkan pengunjung berkomentar, kuki komentar ditetapkan untuk setiap komentator yang bukan pengguna terdaftar dan login, dengan hak istimewa komentar aktual akan dikenakan pemeriksaan lebih lanjut. Dalam apa yang saya percaya adalah konfigurasi yang paling umum, seorang komentator hanya perlu memberikan nama dan alamat email. Ini disimpan dalam dua cookie browser, biasanya comment_author_ . COOKIEHASH
, dan comment_author_email_ . COOKIEHASH
. COOKIEHASH
didefinisikan sesuai dengan opsi pengguna.
Jika diatur untuk mengirimkan file yang baru dibuat ke "pengguna yang dikenal," WPSC menentukan apakah akan menyajikan file yang di-cache berdasarkan beberapa pemeriksaan: Pengguna yang masuk mendapatkan file baru, dan begitu juga pengunjung "yang dapat berkomentar." Yang terakhir ini terutama diidentifikasi oleh kehadiran di browser comment_author_
cookie mereka yang tidak secara spesifik atau unik diidentifikasi untuk pengguna tertentu oleh COOKIEHASH
(biasanya tetapi tidak selalu versi MD5-encoded dari "siteurl" yang direkam dalam opsi situs).
Apa yang tampaknya menjadi bagian penting dari kode WPSC, dari wp-cache-phase1.php LL371-383, menggunakan pola RegEx untuk mendapatkan string, bersepeda melalui cookie:
$regex = "/^wp-postpass|^comment_author_";
if ( defined( 'LOGGED_IN_COOKIE' ) )
$regex .= "|^" . preg_quote( constant( 'LOGGED_IN_COOKIE' ) );
else
$regex .= "|^wordpress_logged_in_";
$regex .= "/";
while ($key = key($_COOKIE)) {
if ( preg_match( $regex, $key ) ) {
wp_cache_debug( "wp_cache_get_cookies_values: $regex Cookie detected: $key", 5 );
$string .= $_COOKIE[ $key ] . ",";
}
next($_COOKIE);
}
Sekarang, jika saya bekerja secara ketat di PHP, saya bisa memproduksi ulang atau menghubungkan ke fungsi-fungsi inti WP, dan mendapatkan comment_author_ . COOKIEHASH
set normal dengan templat komentar, tapi saya bekerja di jQuery menggunakan plug-in jQuery Cookie. Namun, seperti yang Anda lihat jika Anda melihat RegEx, fungsi WPSC tidak peduli tentang COOKIEHASH
: Itu puas jika bertemu comment_author_
.
SOLUSI TENTATIF SAYA
$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );
Bagi mereka yang tidak terbiasa dengan jQuery Cookie: Di atas menetapkan cookie sesi sederhana dengan key = comment_author_proxyhash
dan value = proxy_author
, bagus untuk seluruh situs. (Juga, bagi mereka yang menggunakan jQuery Cookie dan WP, selain menggantikan jQuery yang sudah dikenal $
untuk WP jQuery
, saya juga sudah siap $.cookie.raw = true;
.)
Saya menambahkan baris ke skrip jQuery saya, dan, voila! , WPSC, W3 Total Cache, dan Comet Cache semuanya bertindak seperti yang saya inginkan. Setelah saya menggunakan skrip, dan memuat ulang, saya mendapatkan halaman baru. Jika saya menempatkan komentar nyata, cookie normal comment_author_
dan comment_author_email_
diatur, dan tampaknya tidak ada masalah dengan keberadaan bersama.
Mungkin satu cacat adalah bahwa cookie "proxyhash" akan melakukan perjalanan dengan pengguna selama dia menjaga sesi terbuka, tetapi itu tidak membuat saya merasa sebagai masalah besar - atau bahkan layak peringatan. Saya tentu saja tidak pernah mendengar seseorang mengeluh tentang hal seperti itu terjadi pada salah satu cookie biasa.
Tapi mungkin ada sesuatu yang saya lewatkan, dan akan menemukan banyak kesengsaraan saya, jika berpotensi untuk membangun saya juga. Atau mungkin ada cara praktik terbaik yang relatif sederhana bagi saya untuk mereplikasi COOKIEHASH
di jQuery, juga mencakup kasus penggunaan alternatif ... atau untuk mencapai efek akhir yang sama dengan cara lain - cara lain untuk mengelabui plug-in caching untuk merawat pengunjung. sebagai komentator ...
Jika tidak, adakah alasan bagus untuk TIDAK mendorong ini atau sesuatu yang dekat dengannya ke alam semesta melalui plug-in?
wp_localize_script
untuk mengirimkan hash cookie ke Javascript Anda sehingga Anda dapat menggunakan cookie "asli" alih-alih proxyhash. Jika tidak, ini adalah masalah yang sangat menarik dan solusi Anda tampaknya solid, meskipun cookie + cache selalu sangat rumit sehingga sulit untuk mengatakan apakah itu solusi yang "tepat" atau jika ada sesuatu yang terlewatkan. Penelitian hebat!Jawaban:
Solusi Anda dengan cookie comment_author_proxyhash tentu saja akan berfungsi secara teknis - semua plugin caching yang saya tahu tidak menganalisis nilai hash dan hanya akan menghentikan pengiriman konten yang di-cache berdasarkan comment_author_ * cookie cookie.
Masalahnya di sini adalah bahwa fungsi caching halaman adalah sesuatu yang sangat dibutuhkan oleh situs web dan seringkali caching halaman dikonfigurasikan dengan tepat karena kinerja WordPress telanjang tidak cukup dan bahkan dapat membuat crash server pada waktu puncak. Tergantung pada sifat konten situs web, tetapi pemilik situs terkadang tidak dapat membayar perangkat keras yang diperlukan untuk menangani semuanya melalui kode PHP / WP. Dengan kata lain, sebanyak mungkin lalu lintas harus dilayani dari cache halaman bila memungkinkan. Dari latihan saya dapat mengatakan bahwa kita sering harus mengidentifikasi dan menonaktifkan plugin yang melakukan pengecualian cache.
Tentu saja itu tidak selalu memungkinkan, tetapi cobalah untuk bekerja dengan halaman yang di-cache kapan pun memungkinkan. Misalnya Anda dapat menyembunyikan
div
tag dengan komentar yang ingin Anda abaikan melalui javascript, atau blok seluruh komentar ajax-ify.Bagaimanapun Anda tidak perlu menandai pengunjung sebagai komentator, tetapi berhentilah melakukan caching karena alasan logika kustom Anda. Jadi lebih baik menggunakan cookie unik dan menjadikannya sinyal pengecualian cache. W3 Total Cache memiliki opsi "Tolak cookie" untuk itu, tetapi tidak plugin lain dari daftar Anda sehingga Anda akan memerlukan hack seperti yang Anda sarankan.
sumber