SetCookie nu funcționează deloc
Nu reușesc să setez corect un cookie prin tema WordPress. Am introdus următorul cod la sfârșitul fișierului functions.php
din tema mea.
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');
Am încercat chiar să folosesc JavaScript pentru a verifica dacă funcția este executată (și este).
De ce nu se setează cookie-urile mele? (Codul funcționează local - în afara WordPress).

Asigurați-vă că antetele HTTP nu au fost deja trimise în momentul în care doriți să setați cookie-ul. Iată cum puteți testa acest lucru:
function set_cookie() {
var_dump(headers_sent()); // ar trebui să fie bool(false)
...
Activarea WP_DEBUG
în fișierul config.php vă poate ajuta și în timpul depanării.
Apropo, ar trebui să faceți o filtrare pe $_GET['id']
. Această variabilă ar putea conține orice. Convertirea acesteia într-un număr întreg (pozitiv) ar fi o soluție bună:
$referrerID = absint($_GET['id']); // Notă: absint() este o funcție WordPress

Pot plasa acea funcție oriunde și cum mă va anunța despre rezultate? Returnează informația prin echo?

Da, var_dump()
afișează rezultatul prin echo.

a returnat bool(false) - cookie-ul tot nu este setat. Există vreo posibilitate să facem un chat privat dacă ai un minut liber?

Nu este posibil acum. Poți inspecta antetele de răspuns HTTP? Caută antetul Set-Cookie
.

Care ar fi cea mai bună metodă de a prelua astfel de antete? Am folosit acest cod acum, dar nu cred că este ceea ce căutai:
foreach (getallheaders() as $name => $value) { echo "$name: $value\n"; }

Poți folosi un instrument precum Firebug pentru a inspecta cererea HTTP. Un instrument online precum http://www.webpagetest.org/ ar putea face și el treaba.

Iată rezultatele mele de test - cookie-ul pe care îl setez este "referrerid" cu valoarea "1". SE VEDE bine acolo, de ce crezi că nu se setează corect pe baza acestor rezultate?
http://www.webpagetest.org/result/120119_V7_2XVFT/1/details/cached/

Ești sigur că browserul tău acceptă cookie-uri de la domeniul site-ului tău?

O altă opțiune este să folosești ob_start();
și ob_end_flush();
din PHP.
Puteți găsi documentație pentru aceste două funcții aici
Modul în care am rezolvat problema mea a fost să apelez aceste două funcții înainte și după tag-urile de deschidere și închidere HTML, astfel:
<?php ob_start(); ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php /* Bucla Wordpress și alte coduri de șablon aici */ ?>
</body>
</html>
<?php ob_end_flush(); ?>
Problema întâlnită de mine era apelarea unei funcții globale care folosea setcookie();
din PHP, iar deoarece WordPress procesează pagina progresiv, cookie-ul nu putea fi creat din cauza faptului că antetele paginii fuseseră deja trimise.
Funcția de bufferizare a ieșirii din PHP forțează trimiterea antetelor înainte ca WordPress să proceseze pagina.
Sper că această informație vă este utilă.
