Настройка пользовательских файлов cookie в Wordpress

13

Я пытаюсь настроить файлы cookie для перенаправления возвращающихся пользователей на определенную страницу моего сайта Wordpress.

Я хотел бы получить несколько советов по поводу этих двух вещей:

  1. Где в php-файлах Wordpress следует проверять куки перед загрузкой любого контента для обработки перенаправления? Есть хороший файл, в котором это должно существовать по сравнению с другими?
  2. Как правильно установить cookie в Wordpress? setcookie('cookie_name', 'cookie_value', time()+4000);похоже, не сохраняет куки в моей системе.
Аттикус
источник
Ах, понял, что мне нужно подключить это в init (). РЕШЕНИЕ: я создал функцию в functions.php, которая установит и проверит cookie. чтобы это работало должным образом, после определения функции, вне функции вызовите это: add_action ('init', 'function-name');
4
Вы можете ответить на свой вопрос ...
40XUserNotНайдено
2
На самом деле, это явно поощряется. Пожалуйста, ответь сам. Я также отправляю это в WordPress.SE, так как там это кажется более подходящим.
Спасибо, ребята - я не понимал, что есть область Wordpress. И спасибо за подсказку, чтобы ответить самому себе :) APpreciated, +1.
Аттик

Ответы:

17

1 - Вы можете проверить наличие файлов cookie и выполнить переадресацию с помощью ловушек, которые вызываются перед любым выводом, таким как ловушка 'init':

<?php

// Hook the function "redirect()" on to the "init" action
add_action('init', 'redirect');

// redirect() may redirect the user depending on the cookies he has
function redirect(){
  /* CODE */
}

?>

2 - Лучший способ установить куки - это использовать ловушку init так:

<?php

add_action('init', 'my_setcookie');

// my_setcookie() set the cookie on the domain and directory WP is installed on
function my_setcookie(){
  $path = parse_url(get_option('siteurl'), PHP_URL_PATH);
  $host = parse_url(get_option('siteurl'), PHP_URL_HOST);
  $expiry = strtotime('+1 month');
  setcookie('my_cookie_name_1', 'my_cookie_value_1', $expiry, $path, $host);
  /* more cookies */
  setcookie('my_cookie_name_2', 'my_cookie_value_2', $expiry, $path, $host);
}

?>

Это более последовательно, если у вас есть блог на www.example.com/blog , то куки не будут доступны на

  • www.example.com
  • www.example.com/store
  • example.com
  • www2.example.com
  • ...

Обновить

вы также должны иметь возможность использовать константы COOKIE_PATH и COOKIEDOMAIN вместо того, чтобы самостоятельно их выяснять, что я только что заметил в ответе Андре Р Коля - drzaus

Набиль Кадими
источник
Как вы положили несколько переменных, например, Firstname, LastName, Random1, Random2 вместо просто переменной 'my_cookie_1'.?
Damainman
1
Просто добавьте большеsetcookie()
Набиль Кадими
О, я не знал, что куки содержат только одну переменную на куки. Есть ли способ установить несколько файлов cookie без указания вышеуказанного кода времени и URL-адреса, чтобы он уменьшал код? Будут ли они помещены в переменную?
Damainman
Вы также должны быть в состоянии использовать COOKIEPATHи COOKIEDOMAINконстанты , а не вычислять их себе, что я только что заметил в Андре R Коля ответ
drzaus
исправление: COOKIE_DOMAIN
drzaus
11

Вы, вероятно, должны использовать константы COOIKEPATHи COOKIE_DOMAIN, существующие с WP 3.0

setcookie("your_cookie", $your_value, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
Андре Р. Коля
источник
7

Ах, понял, что мне нужно это зацепить init().

РЕШЕНИЕ: я создал функцию в functions.php, которая установит и проверит cookie. чтобы это работало должным образом, после определения функции, вне функции вызовите это:

add_action('init', 'function-name'); 
Аттикус
источник
1

Этот способ сработал:

    add_action( 'init', 'function-to-setcookie' ); 

    function function-to-setcookie(){

        //use condition here , in which page you eant to set cookie
        //choose a page where you want the cookie to be set
        $pageurl = get_option('siteurl').'/set-cookie-page'; 

       // use a function to get current page url and use condition 
       //to match it with the desired page where you want to set cookie 
       if ( $pageurl === current_page_url() ) {
           setcookie( 'cookie_name', 'cookie_value', $expiryTime, $cookiepath, $siteurl );
         }

    }
Сиддхартха Гаутам
источник
Пожалуйста, исправьте форматирование вашего кода.
Евуска
Также небольшой материал об источнике действительно полезен.
Bueltge