私はバイリンガルサイトを作成していて、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';
Peter here による興味深い記事を見つけました。 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 ();
}
これにより、ユーザーがログアウトし、別のアカウントで再度ログインすると、古いセッションが破棄されます。