Файл cookie WordPress доступен только с одной страницы, даже если он установлен для всего домена

#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’ ).