Как использовать session_start в WordPress?

Я создаю двуязычный сайт и решил использовать session_start для определения языка страницы, используя следующее:

 session_start(); if(!isset($_SESSION['language'])){ $_SESSION['language'] = 'English'; //default language } 

Проблема в том, что он сталкивается с WordPress, и я получаю следующее:

Предупреждение: session_start () [function.session-start]: не удается отправить cookie сеанса – уже отправленные заголовки (вывод запущен в /home/neurosur/public_html/v2/wp-content/themes/default/header.php:8) в /home/neurosur/public_html/v2/wp-content/themes/default/region.php в строке 13

Есть ли способ обойти это?

Переместите свой код в начало файла header.php. И проверьте, существует ли сеанс:

 if(session_id() == '') session_start(); your code here... 

РЕДАКТИРОВАТЬ

WordPress отправляет информацию заголовка перед запуском файла header.php. Поэтому начало сеанса в файле header.php может по-прежнему противоречить информации заголовка, которую посылает wordpress. Запуск его на init позволяет избежать этой проблемы. ( Из комментария jammypeach )

Напишите следующий код в файле functions.php:

 function register_my_session() { if( !session_id() ) { session_start(); } } add_action('init', 'register_my_session'); 

Теперь, если вы хотите установить данные в сеансе, выполните следующие действия:

 $_SESSION['username'] = 'rafi'; 

Здесь я нашел интересную статью Питера. Я использую следующий код в моих functions.php :

 add_action('init', 'myStartSession', 1); add_action('wp_logout', 'myEndSession'); add_action('wp_login', 'myEndSession'); function myStartSession() { if(!session_id()) { session_start(); } } function myEndSession() { session_destroy (); } 

Это разрушает старый сеанс, когда пользователь снова выходит из системы с другой учетной записью.