Comment utiliser session start dans Wordpress?
je crée un site bilingue et j'ai décidé d'utiliser session_start
pour déterminer la langue de la page en utilisant le code suivant:
session_start();
if(!isset($_SESSION['language'])){
$_SESSION['language'] = 'English'; //default language
}
Le problème, c'est que c'est en contradiction avec Wordpress et j'ai le code suivant:
Warning: session_start() [function.session-start]: ne peut pas envoyer session les en - têtes de cookies déjà envoyés par / home/neurosur/public_html/v2/wp-content/themes/default / header.php: 8) dans / home/neurosur/public_html/v2/wp-content/themes/default / region.php sur la ligne 13
Est-il un moyen de contourner ce problème?
3 réponses
déplacez votre code vers le haut de l'en-tête.fichier php. Et de vérifier si la session existe déjà:
if(session_id() == '')
session_start();
your code here...
EDIT
Wordpress envoie des informations d'en-tête avant l'en-tête.le fichier php est lancé. Donc démarrer la session dans l'en-tête.php peut encore entrer en conflit avec les informations d'en-tête que wordpress envoie. L'exécutant sur init évite ce problème. (à Partir de jammypeach commentaire)
Écrire le code suivant dans vos fonctions.fichier php:
function register_my_session()
{
if( !session_id() )
{
session_start();
}
}
add_action('init', 'register_my_session');
maintenant, si vous voulez définir des données en session, faites comme ceci
$_SESSION['username'] = 'rafi';
j'ai trouvé un article intéressant par Peter ici. Je suis en utilisant le code suivant dans mon 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 ();
}
cela détruit l'ancienne session lorsque l'utilisateur se déconnecte alors de nouveau avec un compte différent.