#php #wordpress #cookies
#php #wordpress #файлы cookie
Вопрос:
Как я могу устанавливать, получать и уничтожать cookies в WordPress?
Я просматривал веб, но не могу получить четких идей, пожалуйста, помогите мне найти как.
Комментарии:
1. Извините, как упоминалось в комментарии, следующее вам не подходит: codex.wordpress.org/Function_Reference/wp_setcookie Просто используйте то, что предложил Фил. Удачи!
2. Все, что это делает, это устанавливает идентификатор пользователя на основе файлов cookie для аутентификации. Смотрите codex.wordpress.org/Function_Reference/wp_set_auth_cookie
3. Будьте осторожны, большинство статей там делают это неправильно или, по крайней мере, не так, как в WordPress. Обязательно используйте предварительно настроенные константы cookie, предлагаемые WordPress, ознакомьтесь с этой статьей для получения дополнительной информации о том, как правильно устанавливать, получать и удалять cookies benmarshall.me/setting-cookies-in-wordpress
Ответ №1:
Вы можете извлекать cookies и манипулировать ими либо на стороне сервера, используя PHP, либо на стороне клиента, используя JavaScript.
В PHP вы устанавливаете cookies с помощью setcookie()
. Обратите внимание, что это должно быть сделано до отправки любого вывода в браузер, что может быть довольно сложной задачей в WordPress. Вы в значительной степени ограничены некоторыми из ранних запущенных хуков, которые вы можете установить с помощью плагина или файла темы ( functions.php
например), например
add_action('init', function() {
if (!isset($_COOKIE['my_cookie'])) {
setcookie('my_cookie', 'some default value', strtotime(' 1 day'));
}
});
Получение cookies в PHP намного проще. Просто получите их по имени из $_COOKIE
super global, например
$cookieValue = $_COOKIE['my_cookie'];
Для удаления файла cookie требуется установить файл с датой истечения срока действия в прошлом, что-то вроде
setcookie('my_cookie', null, strtotime('-1 day'));
Для JavaScript я бы рекомендовал взглянуть на один из плагинов jQuery cookie (поскольку jQuery уже является частью WordPress). Попробуйте http://plugins .jquery.com/project/Cookie
Комментарии:
1. Также — убедитесь, что вы устанавливаете правильный домен для ваших cookies. В будущем вы можете захотеть, чтобы основной домен и поддомен имели доступ к одним и тем же cookies. Если вы установите свои файлы cookie прямо сейчас, вам не придется беспокоиться о их сбросе в будущем.
2. При установке файла cookie в wordpress я бы использовал некоторые из установленных для него констант: setcookie( ‘my_cookie’, ‘некоторое значение по умолчанию’, strtotime (‘ 1 день’), COOKIEPATH, COOKIE_DOMAIN, false ); Без указания пути и домена вы будете устанавливать файл cookie постранично для сайта.
3. Хотя это правда, что cookie лучше всего устанавливать с ранним подключением, или как вы это называете
quite the challenge in WordPress
, всегда есть возможность установить его позже с помощьюAJAX
ответа.4. @ObmerkKronen еще в 2011 году, когда я писал этот ответ, я не думаю, что у WordPress был
AJAX
вариант ответа 🙂5. Насколько я знаю, опция ajax в WordPress существовала по крайней мере с 2008 (когда я начал ее использовать) и наверняка с версии 2.8 в той или иной форме. Но, чтобы было ясно, целью комментария было не оспаривание вашего ответа, а скорее его завершение для дальнейшего использования . 🙂
Ответ №2:
Попробуйте этот код внутри function.php
, чтобы поиграть с Cookies в WordPress
Установите файл cookie в WordPress
add_action( 'init', 'my_setcookie' );
function my_setcookie() {
setcookie( 'my-name', 'my-value', time() 3600, COOKIEPATH, COOKIE_DOMAIN );
}
Получить файл cookie в WordPress
add_action( 'wp_head', 'my_getcookie' );
function my_getcookie() {
$alert = isset( $_COOKIE['my-name'] ) ? $_COOKIE['my-name'] : 'not set';
echo "<script type='text/javascript'>alert('$alert')</script>";
}
Удалите или отмените установку cookie в WordPress
add_action( 'init', 'my_deletecookie' );
function my_deletecookie() {
setcookie( 'my-name', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN );
}
Ответ №3:
Чтобы установить cookie в WordPress, я использовал значение $ domain. С его помощью я могу использовать значение cookie по всему сайту.
$domain = ($_SERVER['HTTP_HOST'] != 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie("cookie_name", 'cookie_value', 0, '/', $domain);
Чтобы отменить установку
setcookie("cookie_name", '', time()-1000, '/');