Come utilizzare un valore di sessione personalizzato in WordPress?
Come posso utilizzare un valore di sessione personalizzato (custom) in WordPress?
Per esempio: $_SESSION['myname']="4lvin"
Ho già inserito session_start()
in tutte le pagine necessarie come segue.
<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>
Ma non funziona a livello globale.
Funziona solo nella pagina stessa.
NON è richiamabile globalmente da altre pagine (usando la stessa logica).

MODIFICA: "IL PLUGIN QUI SOTTO NON È PIÙ DISPONIBILE, QUINDI UTILIZZATE QUESTO PLUGIN AL SUO POSTO: WordPress Session Plugin"
C'è un buon plugin per WordPress adattato dalla classe CodeIgniter Session: WP Sessions Plugin.
Quando attivi il plugin, puoi iniziare a utilizzare l'oggetto $session
da qualsiasi parte del tuo tema (l'oggetto $session
è disponibile come variabile globale). Ad esempio, per utilizzare l'oggetto $session nel file header.php
, aggiungi semplicemente questo codice:
global $session;
Se sei uno sviluppatore di plugin e vuoi adattare questo plugin al tuo progetto, nel pacchetto troverai anche una versione standalone. La documentazione del plugin fornisce ulteriori informazioni per gli sviluppatori su come adattarlo al proprio progetto.
Ecco alcune funzioni utili per gli sviluppatori di temi e plugin.
Puoi aggiungere dati alla sessione in questo modo:
// Un singolo valore
$session->set_userdata( 'username', 'john' );
// Passando un array
$array = array(
'username' => 'john',
'email' => 'john@gmail.com'
);
$session->set_userdata( $array );
Per recuperare i dati della sessione:
$session->userdata( 'username' );
Per ottenere tutti i dati della sessione:
$session->all_userdata(); // restituisce un array
Per rimuovere un elemento dalla sessione:
$session->unset_userdata( 'username' );
Per rimuovere più elementi dalla sessione:
$array = array(
'username' => '',
'email' => ''
);
$session->unset_userdata( $array );
Puoi anche utilizzare i Flashdata, ovvero dati di sessione che saranno disponibili solo per la prossima richiesta al server, per poi essere automaticamente cancellati. Questi possono essere molto utili per messaggi informativi o di stato (es. "Prodotto eliminato").
// Aggiungere Flashdata
$session->set_flashdata( 'item', 'value' );
// Recuperare Flashdata
$session->flashdata( 'item' );
// Preservare flashdata
// (se hai bisogno di preservare i flashdata attraverso una richiesta aggiuntiva,
// puoi utilizzare questa funzione):
$session->keep_flashdata( 'item' );
Per distruggere la sessione:
$session->sess_destroy();
Il plugin supporta anche gli shortcode. Puoi stampare qualsiasi dato della sessione nei tuoi post o pagine:
[session key="username"]
Per accedere a una chiave secondaria:
[session key="user_data" sec_key="display_name"]
Spero che questo sia utile per qualcuno.

Sì, dovresti usare questo: http://wordpress.org/plugins/wp-session-manager/ (Questo è molto migliore e stabile).

Un altro plugin https://wordpress.org/plugins/wp-native-php-sessions/

Perché non possiamo usare la funzionalità predefinita delle sessioni PHP in WordPress? Questa soluzione crea una dipendenza da un plugin.

WordPress non utilizza le sessioni, ecco perché le tue variabili di sessione non funzionano.
Infatti, se alcune variabili sono definite, WordPress distruggerà effettivamente $_SESSION
per mantenere se stesso stateless.
Ma se vuoi davvero utilizzare le sessioni, prova ad aggiungere session_start()
all'inizio del tuo file wp-config.php
. Questo (si spera) avvierà le sessioni ogni volta che WP si avvia, così potrai impostare e leggere le tue variabili $_SESSION
in altre parti del sistema.

Ho notato che WordPress utilizza i Cookie per memorizzare alcuni dati di accesso. Quando ho stampato l'array $_COOKIE, ho potuto vedere alcuni dati. Vorrei impostare manualmente quei dati. Maggiori informazioni qui: http://stackoverflow.com/questions/21595900/how-to-bypass-wordpress-login

Inoltre, è consigliabile modificare il file wp-config.php per avviare la sessione? Se aggiorniamo WordPress successivamente, il file wp-config.php verrà aggiornato anch'esso?

Tutorial che approfondisce questo argomento http://silvermapleweb.com/using-the-php-session-in-wordpress/

@shasikanth no, wp-cofnig.php
non viene modificato durante gli aggiornamenti.

Una soluzione semplice senza utilizzare plugin o senza modificare il file wp-config.php
è aggiornare il functions.php
del tuo tema e inserire all'inizio il seguente codice:
<?php
//File functions.php di WordPress
if(!session_id()) {
session_start();
}
Poiché il functions.php
(o cosiddetto file delle funzioni del tema) è un template incluso automaticamente nei temi di WordPress e agisce come un plugin per il tuo sito WordPress. Inoltre, se hai più di 1 tema installato sul tuo sito web, modificare il functions.php
influenzerà solo il tema selezionato, non tutti (dove potresti non voler abilitare le sessioni).
