I cannot get a cookie to set properly through WordPress theme. I am putting the following code on the bottom of my functions.php
page for my theme.
function set_cookie() {
if (isset($_GET['id'])) {
$referrerID = $_GET['id'];
setcookie('referrerid', $referrerID,time()+ 3600 * 24, COOKIEPATH, COOKIE_DOMAIN, false);
}
}
add_action( 'init', 'set_cookie');
I even went as far as using JavaScript to alert if the script reached the function (which it did).
Why are my cookies not being set?? (The code works locally – outside of WordPress that is).
Make sure the HTTP headers are not sent already at the point you want to set the cookie. Here’s how you can test that:
Turning
WP_DEBUG
on in your config.php file may help also while debugging.By the way, you really should be doing some filtering on
$_GET['id']
. This variable could contain anything. Casting it to a (positive) integer should go a long way:Another option is to use PHP’s
ob_start();
andob_end_flush();
.You can find documentation on the two functions here
The way I resolved my issues was to call the two functions before and after the opening and closing html tags like this:
The issue I was running into was calling a global function that used PHP’s
setcookie();
and because WordPress processes the page progressively, the cookie couldn’t be created due to the page’s headers already being sent.PHP’s output buffering function forces the headers to be sent before WordPress processes the page.
Hope this helps.