Kalau kamu pernah mencoba set cookie di WordPress dan cookie itu baru muncul setelah kamu menghapus cache, kamu nggak sendirian. Ini adalah salah satu masalah yang paling sering dialami developer saat pakai plugin caching seperti WP Rocket, LiteSpeed Cache, W3 Total Cache, SiteGround Optimizer, atau Breeze.
Di artikel ini, kamu akan belajar kenapa cookie nggak muncul, dan gimana cara mengatasinya tanpa harus menonaktifkan plugin cache.
Kenapa Cookie Nggak Berfungsi di Halaman yang Di-cache
Plugin caching mempercepat situs WordPress dengan membuat dan menayangkan file HTML statis untuk pengunjung. Artinya, sebagian besar kode PHP — termasuk fungsi seperti setcookie() atau logika kondisi di functions.php — nggak dijalankan di setiap permintaan halaman.
Misalnya kamu punya kode seperti ini:
if (isset($_GET['ref'])) {
setcookie('ref', $_GET['ref'], time() + 3600, '/');
}
Kode ini hanya akan jalan saat pertama kali sebelum halaman di-cache. Setelah itu, pengunjung bakal menerima versi statis dari halaman yang sudah disimpan, dan PHP nggak akan dieksekusi lagi sampai cache dibersihkan. Itulah kenapa cookie terasa “baru muncul” setelah kamu hapus cache.
Cara Set Cookie Tanpa Harus Hapus Cache
Supaya situs kamu tetap cepat tapi cookie juga bisa diset secara dinamis, kamu perlu menjalankan logika cookie di luar lapisan cache.
Berikut tiga cara efektif yang bisa kamu pilih.
1. Set Cookie Menggunakan JavaScript (Paling Disarankan)
Ini cara paling gampang dan paling aman terhadap cache.
Tambahkan skrip ini di bagian footer situs kamu (misalnya di footer.php atau lewat plugin custom JavaScript):
<script>
document.addEventListener("DOMContentLoaded", function() {
const params = new URLSearchParams(window.location.search);
const ref = params.get('ref'); // ubah 'ref' sesuai nama parameter URL kamu
if (ref) {
document.cookie = "ref=" + encodeURIComponent(ref) + "; path=/; max-age=" + (60 * 60 * 24 * 30);
}
});
</script>
Kenapa ini berhasil:
- Kode ini dijalankan di browser, jadi nggak terpengaruh cache server.
- Langsung berfungsi di halaman mana pun yang di-cache.
- Kamu nggak perlu hapus cache atau matikan plugin performa.
Opsional: Kalau kamu mau menghapus parameter dari URL setelah cookie diset, tambahkan kode berikut:
if (ref) {
const newUrl = window.location.pathname + window.location.hash;
window.history.replaceState({}, document.title, newUrl);
}
Hasilnya, URL tetap bersih dan lebih rapi buat SEO maupun dibagikan ke orang lain.
2. Set Cookie Menggunakan AJAX atau REST API
Kalau kamu perlu menyimpan atau memvalidasi cookie di sisi server, kamu bisa pakai AJAX. Endpoint AJAX di WordPress nggak di-cache, jadi cara ini selalu berhasil.
JavaScript:
const params = new URLSearchParams(window.location.search);
const ref = params.get('ref');
if (ref) {
fetch('/wp-admin/admin-ajax.php?action=set_ref_cookie&ref=' + encodeURIComponent(ref));
}
PHP (functions.php):
add_action('wp_ajax_nopriv_set_ref_cookie', 'set_ref_cookie');
add_action('wp_ajax_set_ref_cookie', 'set_ref_cookie');
function set_ref_cookie() {
if (!empty($_GET['ref'])) {
setcookie('ref', sanitize_text_field($_GET['ref']), time() + 3600 * 24 * 30, '/');
}
wp_die();
}
Kenapa ini berhasil:
Rute AJAX dan REST API di WordPress tidak di-cache, jadi PHP akan selalu dijalankan setiap kali kode ini dipanggil.
3. Mengecualikan Halaman atau Cookie Tertentu dari Cache
Kalau logika cookie kamu harus jalan sebelum halaman dimuat, kamu bisa mengecualikan halaman tertentu agar nggak di-cache.
Sebagian besar plugin caching punya pengaturan seperti:
- Never Cache These URLs
- Exclude Cookies
- Disable Cache for Logged-In Users
Gunakan opsi ini untuk mencegah cache di halaman yang butuh PHP berjalan secara langsung.
Bonus: Menyimpan Beberapa Parameter URL Sebagai Cookie
Kalau kamu punya URL marketing yang berisi beberapa parameter, seperti:
https://example.com/?ref=123&utm_source=google&utm_campaign=winter-sale
Kamu bisa menyimpan semuanya otomatis sebagai cookie dengan skrip berikut:
<script>
document.addEventListener("DOMContentLoaded", function() {
const params = new URLSearchParams(window.location.search);
params.forEach((value, key) => {
document.cookie = key + "=" + encodeURIComponent(value) + "; path=/; max-age=" + (60 * 60 * 24 * 30);
});
});
</script>
Setiap parameter (misalnya ref, utm_source, utm_campaign) akan disimpan sebagai cookie sendiri dan bisa kamu akses di PHP lewat $_COOKIE.
Perbandingan Metode
| Metode | Bekerja Dengan Cache | Tingkat Kesulitan | Cocok Untuk |
|---|---|---|---|
| JavaScript | Ya | Mudah | Tracking, marketing, referral |
| AJAX atau REST API | Ya | Menengah | Logika server, validasi |
| Pengecualian Cache | Sebagian | Menengah | WooCommerce, login, halaman dinamis |
Kesimpulan
Plugin caching memang penting banget buat mempercepat website WordPress, tapi juga bisa bikin kode PHP seperti setcookie() nggak jalan.
Kabar baiknya, kamu nggak perlu hapus atau matikan cache supaya cookie bisa berfungsi.
Dengan pakai JavaScript atau endpoint non-cache seperti AJAX, kamu bisa tetap dapetin kecepatan tinggi tanpa kehilangan fungsionalitas dinamis.