Как хранить и получать переменные в сессиях WordPress?

9 окт. 2013 г., 16:53:25
Просмотры: 158K
Голосов: 37

У меня есть форма с чекбоксами, полями ввода и селектами, которая показывает то, что хочет пользователь через AJAX-запрос. Проблема в том, что когда пользователь кликает на элемент и открывается страница с деталями, а затем решает вернуться на предыдущую страницу, ему нужно снова кликать и выбирать свой предыдущий выбор.

Я хотел бы сделать так, чтобы WordPress сохранял все опции в сессии, когда нажимается кнопка перехода на страницу с деталями, и сохранял актуальную информацию в сессии, а затем, когда пользователь снова посещает страницу, значения проверялись бы в сессии и устанавливались, если они там есть.

Возможно ли это сделать в WordPress?

Если да, то как?

Давайте упростим и скажем, что у нас есть что-то вроде этого в нашей форме:

<input class="car_color" type="checkbox" name="car_color" value="1" />
<input class="car_color" type="checkbox" name="car_color" value="2" />
<input class="car_color" type="checkbox" name="car_color" value="8" />
<input class="car_color" type="checkbox" name="car_color" value="4" />
<input class="car_color" type="checkbox" name="car_color" value="6" />

Я не использую кнопку отправки в моей форме, она обрабатывается через AJAX при изменении input.

А в моих результатах, получаемых через ajax, есть ссылка на страницу с деталями:

<a class="detail-info-link" href="<?php echo $url ?>">

Есть ли идеи, как я могу сохранить мои значения в сессии и вызвать их при повторном посещении/перезагрузке/нажатии кнопки назад в браузере?

Мне нужно иметь возможность читать сохраненные в сессии данные и использовать их через JavaScript и запускать мою функцию поиска через ajax, которая уже хорошо работает.

Мне просто нужно сохранить (вероятно, перед переходом по $link в href кнопки деталей) и читать переменные сессии (если они существуют).

2
Комментарии

Если ответ был вам полезен, рассмотрите возможность его принятия. См. »Что делать, когда кто-то отвечает на мой вопрос?« и/или »Почему важно голосовать?«, дополнительная информация о модели [wordpress.se] доступна в [справке].

Nicolai Grossherr Nicolai Grossherr
29 апр. 2015 г. 15:34:06

Думаю, следующая ссылка вам поможет. https://wordpress.stackexchange.com/questions/105453/getting-headers-already-sent-error-from-plugin

Vivekanand Saraswati Vivekanand Saraswati
4 окт. 2018 г. 16:36:32
Все ответы на вопрос 6
0
47

По умолчанию в WordPress сессии не включены. Если вам нужно активировать PHP-сессии, добавьте следующий код в начало файла functions.php:

if (!session_id()) {
    session_start();
}

Теперь вы можете использовать $_SESSION['ваша-переменная'] = 'ваше-значение'; для установки переменной сессии. Ознакомьтесь с документацией PHP по сессиям.



Обновление:

Был второй ответ, который, на мой взгляд, также имел ценность — к сожалению, он был удалён, и я добавляю информацию здесь. В ответе упоминался плагин WP Session Manager, созданный @eamann, как альтернативное решение.
Я читал о нём, но сам не использовал, так как пока использую PHP-сессии — у меня не возникало проблем с их применением. Вот комментарий автора плагина о возможных преимуществах этого решения.

9 окт. 2013 г. 17:54:40
0

Добавьте это в ваш файл functions.php

<?php

function tatwerat_startSession() {
    if(!session_id()) {
        session_start();
    }
}

add_action('init', 'tatwerat_startSession', 1);
14 июн. 2017 г. 12:39:46
1

Возможно, в WordPress нет привычных сессий... тем не менее, WordPress работает с концепцией пользователей. Вы можете управлять информацией, связанной с конкретными пользователями, используя функции add_user_meta, update_user_meta, get_user_meta и delete_user_meta.

Если вам нужен доступ к этой информации в JavaScript, вы можете написать небольшой PHP-скрипт, который выводит необходимые данные, и вызывать его через Ajax.

12 авг. 2016 г. 23:57:26
Комментарии

Это хорошо только если пользователь авторизован.

Tim Hallman Tim Hallman
10 нояб. 2016 г. 20:31:06
0

Я объясню, как установить сессию с именем пользователя с помощью плагина Native PHP Sessions for WordPress. Вы можете применить эту логику к своей проблеме.

Добавьте это в файл functions.php

if (!session_id()) {
    session_start();
}

  if ( isset( $_POST['wp-submit'] ) ){

    $_SESSION['username']=$_POST['log'];

  }

$_POST['log'] ссылается на поле ввода имени пользователя в форме входа WordPress. Когда пользователь входит в систему, имя пользователя сохраняется в $_SESSION['username']. В вашем случае вы бы заменили 'log' на имена переменных формы, которые у вас есть, например 'car_color'.

Позже вы можете обратиться к имени пользователя в другом PHP-файле следующим образом:

$username=$_SESSION['username'];
5 авг. 2018 г. 23:43:56
0

Сначала вам нужно начать сессию в WordPress, но вы не можете сделать это просто так.

Перед началом сессии необходимо проверить, не была ли сессия уже запущена каким-либо плагином, чтобы избежать неожиданных проблем. Для этого потребуется небольшой алгоритм.

if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
    if(function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
        session_start(apply_filters( 'cf_geoplugin_php7_session_options', array(
          'cache_limiter' => 'private_no_expire',
          'read_and_close' => false
       )));
    }
}
else if (version_compare(PHP_VERSION, '5.4.0', '>=') && version_compare(PHP_VERSION, '7.0.0', '<'))
{
    if (function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
        session_cache_limiter('private_no_expire');
        session_start();
    }
}
else
{
    if(session_id() == '') {
        if(version_compare(PHP_VERSION, '4.0.0', '>=')){
            session_cache_limiter('private_no_expire');
        }
        session_start();
    }
}

Я также добавил поддержку старых версий PHP.

31 авг. 2020 г. 17:35:17
0

На странице PHP, которая получает AJAX-запрос, установите $_SESSION следующим образом.

$car_color = <данные, выбранные пользователем в форме>;
$_SESSION['car_color'] = $car_color;

Доступ к переменной $_SESSION

if(isset($_SESSION['car_color'])) {
    $value = $_SESSION['car_color'];
} else {
    $value = 'Пожалуйста, выберите цвет автомобиля.';
}

Это руководство более подробно рассказывает о правильной настройке и завершении сессий.

5 дек. 2016 г. 22:00:28