Comment utiliser ma propre valeur de session personnalisée dans Wordpress?

17

Comment puis-je utiliser ma propre valeur de session (personnalisée) dans Wordpress?
Par exemple:$_SESSION['myname']="4lvin"

J'ai déjà inséré session_start()toutes les pages dont j'ai besoin comme suit.

<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>

Mais ne fonctionne pas globalement.
Je travaille juste sur la page personnelle.
Il ne peut PAS être appelé globalement à partir d'une autre page (en utilisant la même logique).

夏 期 劇場
la source
Pouvez-vous clarifier la nature spécifique à WordPress de votre question?
Chip Bennett
1
" Quelle est la nature spécifique à WordPress? " - cela signifie, en quoi votre question est-elle liée à WordPress ?
Chip Bennett
1
Je vois une question sur les cookies de session . Je ne vois rien de spécifique à WordPress , c'est pourquoi j'ai demandé des éclaircissements.
Chip Bennett
2
Non. Les sessions et les cookies sont des sujets généraux sur Internet / navigateur Web pour lesquels WordPress est entièrement agnostique.
Chip Bennett
5
Oui, les sessions et les cookies sont des sujets généraux, mais il s'agit plus de faire fonctionner les sessions avec WordPress ... et puisque WP lui-même n'utilise pas de sessions, c'est pertinent ici.
EAMann

Réponses:

13

EDIT: "LE PLUGIN CI-DESSOUS N'EST PLUS DISPONIBLE, DONC S'IL VOUS PLAÎT UTILISER CE PLUGIN AU LIEU: Plugin de session WordPress "

Il existe un bon plugin WordPress adapté de la classe Session CodeIgniter: WP Sessions Plugin .

Lorsque vous activez le plugin, vous pouvez commencer à utiliser un $sessionobjet de n'importe où dans votre thème ( $sessionobjet aussi long que global). Par exemple, pour utiliser l'objet $ session dans un header.phpfichier, ajoutez simplement ce code:

global $session;

Si vous êtes un développeur de plugins et que vous souhaitez adapter ce plugin au vôtre, vous pouvez également trouver une version autonome dans le package. La documentation du plugin donne plus d'informations aux développeurs de plugins sur la façon de s'adapter à votre projet.

Voici quelques fonctions utiles pour les développeurs de thèmes et de plugins.

Vous pouvez ajouter des données de session comme ceci:

// One value
$session->set_userdata( 'username', 'john' );

// Passing array
$array = array(
    'username' => 'john',
    'email'    => '[email protected]'
);

$session->set_userdata( $array );

Pour récupérer les données de session:

$session->userdata( 'username' );

Pour obtenir toutes les données de session:

$session->all_userdata(); // returns array

Pour supprimer un élément de la session:

$session->unset_userdata( 'username' );

Pour supprimer plus d'éléments de la session:

$array = array(
    'username' => '',
    'email'    => ''
);
$session->unset_userdata( $array );

Vous pouvez également utiliser Flashdata, qui sont des données de session qui ne seront disponibles que pour la prochaine demande de serveur, qui sont ensuite automatiquement effacées. Ceux-ci peuvent être très utiles lorsque vous les utilisez pour des messages d' information ou d' état (par exemple, «Le produit a été supprimé»).

// Add Flashdata
$session->set_flashdata( 'item', 'value' );

// Retrieve Flashdata
$session->flashdata( 'item' );

// Preserving flashdata 
// (if you need to preserve flashdata through an additional request, 
// you can use this function):
$session->keep_flashdata( 'item' );

Pour détruire la session:

$session->sess_destroy();

Le plugin prend également en charge les shortcodes . Vous pouvez imprimer toutes les données de session sur vos publications ou pages:

[session key="username"]

Pour atteindre la deuxième clé:

[session key="user_data" sec_key="display_name"]

J'espère que cela aide quelqu'un.

beytarovski
la source
1
Le plugin WP Sessions n'est pas là! ??
Kiren Siva
1
Oui, vous voudrez utiliser celui-ci: wordpress.org/plugins/wp-session-manager (C'est beaucoup mieux et stable).
beytarovski
Pourquoi ne pouvons-nous pas utiliser la fonctionnalité de session PHP par défaut dans WordPress? Cette solution crée une dépendance à l'égard d'un plugin.
Amrit
@Amritpal car tous les serveurs PHP / Apache ne prennent pas en charge les sessions. Si vous voulez créer un logiciel / plugin public comme WP, vous devez y penser. Si son projet personnel où vous êtes en mesure de modifier le serveur, ce n'est pas un problème.
beytarovski
8

WordPress n'utilise pas de sessions, c'est pourquoi vos variables de session ne fonctionnent pas.

En fait, si certaines variables sont définies, WordPress se détruira $_SESSIONpour se garder sans état .

Mais si vous voulez vraiment utiliser des sessions, essayez d'en ajouter session_start()au début de votre wp-config.phpfichier. Nous espérons que cela démarrera les sessions au démarrage de WP, vous pourrez donc définir et lire vos $_SESSIONvariables ailleurs dans le système.

EAMann
la source
J'ai vu que Wordpress utilise des cookies pour stocker des données de connexion. Lorsque j'ai imprimé le tableau $ _COOKIE, j'ai pu voir des données. Je voudrais définir ces données manuellement. Plus d'informations ici: stackoverflow.com/questions/21595900/…
shasi kanth
1
Est-il également recommandé de modifier le fichier wp-config.php pour démarrer la session? Si nous mettons à jour Wordpress ultérieurement, le fichier wp-config.php est-il également mis à jour?
shasi kanth
Tutoriel qui discute de ceci plus silvermapleweb.com/using-the-php-session-in-wordpress
nu everest
1
@shasikanth non, wp-cofnig.phpn'est pas touché aux mises à jour.
T.Todua
1
@shasikanth wp-config.phpne sera pas mis à jour, sinon vous pourriez perdre votre connexion DB et d'autres paramètres que vous avez définis manuellement.
Erenor Paz
-5

Wordpress le prend en charge .

Vous devez ajouter les lignes suivantes en haut defunctions.php

if ( ! session_id() ) {
    session_start();
}
Alvin
la source
10
Pourquoi voudriez-vous commencer la session deux fois?
kaiser