Из
документации (жирным выделил то, что важно):
setcookie() задает cookie, которое будет передано клиенту вместе с другими HTTP-заголовками. Как и любой другой заголовок, cookie должны передаваться до того как будут выведены какие-либо другие данные скрипта (это ограничение протокола). Это значит, что в скрипте вызовы этой функции должны располагаться до остального вывода, включая вывод тегов и , а также пустые строки и пробельные символы.
Из-за этого не работает в footer.php. Если бы у вас был включен режим отладки и вывод ошибок, то вы бы увидели что-то типа:
Warning: Cannot modify header information - headers already sent by (output started at /Users/Ihor/Code/playground/wp-includes/class.wp-styles.php:242) in /Users/Ihor/Code/playground/wp-content/themes/playground/footer.php on line 8
Далее, пример с хуком init работает, но есть 2 нюанса. Во-первых, у вас ошибка - константы DAYS_IN_SECONDS не существует, должна быть DAY_IN_SECONDS. Далее, опять идем в документацию по поводу этого параметра (жирным выделил то, что важно):
expires
Время, когда срок действия cookie истекает. Это метка времени Unix, то есть количество секунд с начала эпохи. Другими словами, желательно задавать это время с помощью функции time(), прибавляя время в секундах, через которое срок действия cookie должен истечь. Либо можно воспользоваться функцией mktime(). time()+60*60*24*30 установит срок действия cookie 30 дней. Если задать 0 или пропустить этот аргумент, срок действия cookie истечет с окончанием сессии (при закрытии браузера).
На языке кода это будет:
function my_setcookie_example()
{
setcookie(
'testing',
'123',
time() + 30 * DAY_IN_SECONDS, // вот так должно быть
COOKIEPATH,
COOKIE_DOMAIN
);
}
add_action( 'init', 'my_setcookie_example' );
Во-вторых, из той же документации (жирным выделил то, что важно):
После передачи клиенту cookie станут доступны через массив $_COOKIE при следующей загрузке страницы. Значения cookie также есть в $_REQUEST.
То есть, ваше
var_dump($_COOKIE['testing']);
сработает только после перезагрузки, а при первой попытке - NULL и:
Notice: Undefined index: testing in /Users/Ihor/Code/playground/wp-content/themes/playground/functions.php on line 134
.
RTFM.