Я создаю двуязычный сайт и решил использовать 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 (); }
Это разрушает старый сеанс, когда пользователь снова выходит из системы с другой учетной записью.