Как использовать собственное значение сессии в WordPress?
Как я могу использовать свое собственное (пользовательское) значение сессии в WordPress?
Например: $_SESSION['myname']="4lvin"
Я уже добавил session_start()
на все нужные страницы следующим образом.
<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>
Но это не работает глобально.
Работает только на той же странице.
Оно НЕ доступно глобально с других страниц (используя ту же логику).

РЕДАКТИРОВАНО: "ПРИВЕДЕННЫЙ НИЖЕ ПЛАГИН БОЛЬШЕ НЕДОСТУПЕН, ПОЭТОМУ ПОЖАЛУЙСТА, ИСПОЛЬЗУЙТЕ ВМЕСТО НЕГО ЭТОТ ПЛАГИН: WordPress Session Plugin"
Существует хороший плагин для WordPress, адаптированный из класса сессий CodeIgniter: WP Sessions Plugin.
После активации плагина вы можете начать использовать объект $session
из любой части вашей темы (объект $session
доступен глобально). Например, чтобы использовать объект $session в файле header.php
, просто добавьте этот код:
global $session;
Если вы разработчик плагинов и хотите адаптировать этот плагин для своего проекта, вы также найдете автономную версию в пакете. Документация плагина содержит дополнительную информацию для разработчиков о том, как адаптировать его к вашему проекту.
Вот несколько полезных функций для разработчиков тем и плагинов.
Вы можете добавить данные сессии следующим образом:
// Одно значение
$session->set_userdata( 'username', 'john' );
// Передача массива
$array = array(
'username' => 'john',
'email' => 'john@gmail.com'
);
$session->set_userdata( $array );
Чтобы получить данные сессии:
$session->userdata( 'username' );
Чтобы получить все данные сессии:
$session->all_userdata(); // возвращает массив
Чтобы удалить один элемент из сессии:
$session->unset_userdata( 'username' );
Чтобы удалить несколько элементов из сессии:
$array = array(
'username' => '',
'email' => ''
);
$session->unset_userdata( $array );
Вы также можете использовать Flashdata — это данные сессии, которые будут доступны только для следующего запроса к серверу, а затем автоматически удаляются. Они могут быть очень полезны для информационных или статусных сообщений (например, «Товар был удален»).
// Добавление Flashdata
$session->set_flashdata( 'item', 'value' );
// Получение Flashdata
$session->flashdata( 'item' );
// Сохранение Flashdata
// (если вам нужно сохранить flashdata для дополнительного запроса,
// вы можете использовать эту функцию):
$session->keep_flashdata( 'item' );
Для уничтожения сессии:
$session->sess_destroy();
Плагин также поддерживает шорткоды. Вы можете выводить любые данные сессии в своих записях или на страницах:
[session key="username"]
Для доступа ко второму ключу:
[session key="user_data" sec_key="display_name"]
Надеюсь, это кому-то поможет.

Да, вам стоит использовать этот: http://wordpress.org/plugins/wp-session-manager/ (Он гораздо лучше и стабильнее).

Ещё один плагин https://wordpress.org/plugins/wp-native-php-sessions/

Почему мы не можем использовать стандартную функциональность сессий PHP в WordPress? Это решение создает зависимость от плагина.

WordPress не использует сессии, поэтому ваши переменные сессий не работают.
Более того, если определенные переменные установлены, WordPress может даже уничтожить $_SESSION
, чтобы сохранить свою stateless-архитектуру.
Но если вам действительно нужно использовать сессии, попробуйте добавить session_start()
в начало вашего файла wp-config.php
. Это (в идеале) будет запускать сессии при каждом старте WordPress, и тогда вы сможете устанавливать и читать переменные $_SESSION
в других частях системы.

Я заметил, что WordPress использует куки для хранения некоторых данных авторизации. Когда я вывел массив $_COOKIE, то увидел эти данные. Я хотел бы установить эти данные вручную. Подробнее здесь: http://stackoverflow.com/questions/21595900/how-to-bypass-wordpress-login

Также, рекомендуется ли изменять файл wp-config.php для запуска сессии? Если мы обновим WordPress позже, будет ли файл wp-config.php тоже обновлен?

Туториал, где подробнее обсуждается эта тема: http://silvermapleweb.com/using-the-php-session-in-wordpress/

Одно простое решение без использования плагинов или изменения файла wp-config.php
— это обновить файл functions.php
вашей темы и добавить в самое начало следующий код:
<?php
//Файл functions.php WordPress
if(!session_id()) {
session_start();
}
Поскольку functions.php
(также называемый файлом функций темы) — это шаблон, автоматически включаемый в темы WordPress, который работает как плагин для вашего сайта. Более того, если у вас установлено больше одной темы на сайте, изменение functions.php
затронет только выбранную тему, а не все (где вы, возможно, не хотите включать сесии).
