#php #wordpress #cookies
#php #wordpress #файлы cookie
Вопрос:
Я установил файл cookie в своем functions.php следующим образом:
add_action('send_headers', 'sfdc_cookie');
function sfdc_cookie() {
if( isset($_GET['sfdc']) amp;amp; '' != $_GET['sfdc'] ) {
if( empty($_COOKIE['sfdc']) ){
if ($_GET['sfdc'] == 'mim'):
setcookie('sfdc', 'cookievalue', time() 3156000, '/', 'www.mydomain.com' );
//$_COOKIE['sfdc'] = 'cookie';
endif;
}
}
echo $_COOKIE['sfdc'];
}
если я обращаюсь к любой странице сайта с помощью ?sfdc =mim, отображается значение. Я предположил, что файл cookie установлен в этот момент, и когда я проверяю сохраненные файлы cookie в браузере Chrome, он, похоже, установлен. Однако, если строка запроса отсутствует, это означает, что файл cookie не существует. Я даже не могу повторить файл cookie на странице.. Почему я не могу повторить значение, когда строка запроса отсутствует в URL?
Я изменил add_action с send_headers на init с тем же результатом.
Комментарии:
1. может быть, вы хотите использовать
$_SESSION
переменную? для меня это работает очень хорошо. Вы также можете проверить,session
уже запущен, и если нет, вы можете запустить его, а затем проверить переменные сеанса. полезно ли это?
Ответ №1:
Вы должны запустить эту функцию следующим образом:
add_action( 'wp_enqueue_scripts', 'sfdc_cookie' ); // <-- this starts the function with the same name in the location named 'wp_enqueue_scripts'
function sfdc_cookie() {
if( isset($_GET['sfdc']) amp;amp; '' != $_GET['sfdc'] ) {
if( empty($_COOKIE['sfdc']) ){
if ($_GET['sfdc'] == 'mim')
{
setcookie('sfdc', 'cookievalue', time() 3156000, '/', 'www.mydomain.com' );
//$_COOKIE['sfdc'] = 'cookie';
}
}
}
если вы хотите запустить файл cookie на странице и сделать его доступным на других, вы должны сделать это следующим образом:
add_action( 'init', 'sfdc_cookie' );
function sfdc_cookie() {
if( !isset($_COOKIE['sfdc']) ) {
setcookie('sfdc', 'cookievalue', time() 3156000, '/', 'www.mydomain.com' );
}
}
Комментарии:
1. никогда не видел
endif
в php. Это какая-тоwordpress
конкретная вещь или что?2. @JonNezbit да, вы можете использовать его в WP или в Laravel, но не таким образом.
3. endif используется в PHP постоянно. php.net/manual/en/control-structures.alternative-syntax.php
4. @Kafus ваше решение не сработало. Похоже, что он вообще не устанавливает файл cookie, когда я использую wp_enqueue_scripts в отличие от send_headers. Я очистил файл cookie перед тестированием, и он не устанавливался и не отображался.
5. @osakagreg попробуйте использовать его в,
init
не вwp_enqueue_scripts
местеinit
на каждой странице WordPress, поэтому это будет: add_action( ‘init’, ‘sfdc_cookie’ ).