Cum să folosești propria valoare de sesiune personalizată în WordPress?
Cum pot folosi propria valoare de sesiune (personalizată) în WordPress?
De exemplu: $_SESSION['myname']="4lvin"
Am inserat deja session_start()
în toate paginile unde am nevoie, după cum urmează.
<?php
session_start();
$_SESSION['myname'] = "4lvin";
?>
Dar nu funcționează la nivel global.
Funcționează doar în pagina curentă.
NU poate fi apelată global din alte pagini (folosind aceeași logică).

EDIT: "PLUGINUL DE MAI JOS NU MAI ESTE DISPONIBIL, AȘA CĂ VĂ RUGĂM SĂ FOLOSIȚI ÎN LOC ACEST PLUGIN: WordPress Session Plugin"
Există un bun plugin WordPress adaptat din clasa de sesiune CodeIgniter: WP Sessions Plugin.
Când activați pluginul, puteți începe să utilizați obiectul $session
din orice parte a temei ($session
obiectul este disponibil ca global). De exemplu, pentru a utiliza obiectul $session în fișierul header.php
, pur și simplu adăugați acest cod:
global $session;
Dacă sunteți dezvoltator de pluginuri și doriți să adaptați acest plugin cu al vostru, puteți găsi și versiunea standalone în pachet. Documentația pluginului oferă mai multe informații pentru dezvoltatorii de pluginuri despre cum să vă adaptați la proiectul vostru.
Iată câteva funcții utile atât pentru dezvoltatorii de teme, cât și pentru cei de pluginuri.
Puteți adăuga date de sesiune astfel:
// O singură valoare
$session->set_userdata( 'username', 'john' );
// Transmiterea unui array
$array = array(
'username' => 'john',
'email' => 'john@gmail.com'
);
$session->set_userdata( $array );
Pentru a prelua datele de sesiune:
$session->userdata( 'username' );
Pentru a obține toate datele de sesiune:
$session->all_userdata(); // returnează un array
Pentru a elimina un singur element din sesiune:
$session->unset_userdata( 'username' );
Pentru a elimina mai multe elemente din sesiune:
$array = array(
'username' => '',
'email' => ''
);
$session->unset_userdata( $array );
Puteți utiliza și Flashdata, care sunt date de sesiune care vor fi disponibile doar pentru următoarea cerere de server și apoi vor fi șterse automat. Acestea pot fi foarte utile atunci când le utilizați pentru mesaje informative sau de stare (de exemplu, „Produsul a fost șters”).
// Adăugare Flashdata
$session->set_flashdata( 'item', 'value' );
// Preluare Flashdata
$session->flashdata( 'item' );
// Păstrare flashdata
// (dacă aveți nevoie să păstrați flashdata printr-o cerere suplimentară,
// puteți utiliza această funcție):
$session->keep_flashdata( 'item' );
Pentru a distruge sesiunea:
$session->sess_destroy();
Pluginul suportă și shortcode-uri. Puteți afișa orice date de sesiune în articolele sau paginile dvs.:
[session key="username"]
Pentru a ajunge la a doua cheie:
[session key="user_data" sec_key="display_name"]
Sper că acest lucru va fi util pentru cineva.

Da, ar fi bine să folosești acesta: http://wordpress.org/plugins/wp-session-manager/ (Este mult mai bun și stabil).

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

De ce nu putem folosi funcționalitatea implicită de sesiune PHP în WordPress? Această soluție creează o dependență de un plugin.

WordPress nu utilizează sesiuni, de aceea variabilele tale de sesiune nu funcționează.
De fapt, dacă anumite variabile sunt definite, WordPress va distruge efectiv $_SESSION
pentru a rămâne fără stare.
Dar dacă chiar dorești să folosești sesiuni, încearcă să adaugi session_start()
la începutul fișierului tău wp-config.php
. Acest lucru va (sperăm) porni sesiunile de fiecare dată când WP pornește, astfel încât vei putea seta și citi variabilele tale $_SESSION
în altă parte a sistemului.

Am observat că WordPress folosește cookie-uri pentru a stoca unele date de autentificare. Când am afișat array-ul $_COOKIE, am putut vedea unele date. Aș dori să setez manual acele date. Mai multe informații aici: http://stackoverflow.com/questions/21595900/how-to-bypass-wordpress-login

De asemenea, este recomandat să modificăm fișierul wp-config.php pentru a porni sesiunea? Dacă actualizăm WordPress ulterior, fișierul wp-config.php va fi actualizat și el?

Tutorial care discută acest subiect în detaliu http://silvermapleweb.com/using-the-php-session-in-wordpress/

O soluție simplă fără a utiliza un plugin sau fără a modifica fișierul wp-config.php
este să actualizezi fișierul functions.php
al temei tale și să inserezi la început următoarele:
<?php
//Fișierul functions.php WordPress
if(!session_id()) {
session_start();
}
Deoarece functions.php
(sau așa-numitul fișier de funcții al temei) este un șablon inclus automat în temele WordPress și acționează ca un plugin pentru site-ul tău WordPress. Mai mult, dacă ai mai mult de 1 temă instalată pe site-ul tău, modificarea functions.php
va afecta doar tema aleasă, nu toate (unde poate nu dorești să activezi sesiunile).
