Как использовать 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

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

Ответы

Ответ 1

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

if(session_id() == '')
     session_start(); 

your code here...

Ответ 2

ИЗМЕНИТЬ

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';

Ответ 3

Я нашел интересную статью Peter здесь. Я использую следующий код в своем 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 ();
}

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