Butuh Website?

Cara Set Cookie di WordPress Saat Menggunakan Plugin Caching (Tanpa Hapus Cache)

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.

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.phpnggak 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.

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.

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.

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.

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.

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

MetodeBekerja Dengan CacheTingkat KesulitanCocok Untuk
JavaScriptYaMudahTracking, marketing, referral
AJAX atau REST APIYaMenengahLogika server, validasi
Pengecualian CacheSebagianMenengahWooCommerce, 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.

Dimulai dengan memahami kebutuhan Anda

Saya juga ada di Whatsapp