Cum să stocăm și să primim variabile în sesiunile WordPress?
Am un formular cu checkbox-uri, inputbox-uri și selectbox-uri care afișează ce dorește utilizatorul prin intermediul unui apel AJAX. Problema este că atunci când utilizatorul dă click pe element și pagina de detalii este afișată, iar apoi decide să se întoarcă la pagina anterioară, trebuie să facă click și să selecteze din nou opțiunile anterioare.
Aș dori ca WordPress să stocheze toate opțiunile în sesiune când se face click pe butonul către pagina de detalii și să salveze informațiile actuale în sesiune, iar apoi când utilizatorul vizitează din nou pagina, valorile să fie verificate în sesiuni și setate dacă sunt găsite.
Se poate face acest lucru în WordPress?
Dacă da, cum?
Să simplificăm și să spunem că avem ceva de genul acesta în formularul nostru:
<input class="car_color" type="checkbox" name="car_color" value="1" />
<input class="car_color" type="checkbox" name="car_color" value="2" />
<input class="car_color" type="checkbox" name="car_color" value="8" />
<input class="car_color" type="checkbox" name="car_color" value="4" />
<input class="car_color" type="checkbox" name="car_color" value="6" />
Nu folosesc buton de submit în formular, totul este gestionat prin AJAX la schimbarea input-ului.
Iar în rezultatele mele obținute prin ajax am un link către pagina de detalii:
<a class="detail-info-link" href="<?php echo $url ?>">
Aveți vreo idee cum pot stoca valorile mele în Sesiune și cum le pot apela când vizitez din nou/reîncarc/folosesc butonul înapoi în browser?
Trebuie să pot citi datele stocate în sesiune și să le folosesc prin Javascript și să declanșez funcția mea de căutare prin ajax care funcționează deja bine.
Am nevoie doar să stochez (probabil înainte de a merge la $link în href al butonului de detalii și să citesc și să trimit variabilele de sesiune (dacă există).
Sesiunile nu sunt activate implicit în WordPress. Dacă doriți să activați sesiunile PHP, adăugați acest cod la începutul fișierului functions.php
:
if (!session_id()) {
session_start();
}
Acum puteți folosi $_SESSION['your-var'] = 'your-value';
pentru a seta o variabilă de sesiune. Consultați documentația PHP despre sesiuni.
Actualizare:
Exista un al doilea răspuns care, în opinia mea, avea și el valoare – din păcate a fost șters, așa că readaug informația aici. Răspunsul făcea referire la WP Session Manager, un plugin scris de @eamann ca soluție alternativă.
Am citit câteva lucruri despre acest plugin, dar nu l-am folosit niciodată pentru că, până acum, am rămas la sesiunile PHP – nu am avut niciodată problema să nu le pot folosi. Acesta este un comentariu/declarație al autorului pluginului despre câteva posibile avantaje.

Poate nu există sesiuni obișnuite în WordPress... oricum, WordPress cunoaște conceptul de utilizatori. Puteți gestiona informațiile legate de utilizatorii specifici cu funcțiile add_user_meta
, update_user_meta
, get_user_meta
și delete_user_meta
.
Dacă aveți nevoie de informațiile salvate în acest mod în JavaScript, puteți scrie un mic script PHP care afișează ceea ce aveți nevoie și să-l apelați cu Ajax.

Voi explica cum să setezi o sesiune pentru numele de utilizator cu pluginul Native PHP Sessions for WordPress. Poți aplica această logică pentru problema ta.
Adaugă acest cod în fișierul functions.php
if (!session_id()) {
session_start();
}
if ( isset( $_POST['wp-submit'] ) ){
$_SESSION['username']=$_POST['log'];
}
$_POST['log'] se referă la câmpul de introducere a numelui de utilizator din formularul de login WordPress. Când un utilizator se autentifică, numele de utilizator este salvat în $_SESSION['username']. În cazul tău, ai schimba 'log' cu numele variabilelor din formularul tău, de exemplu 'culoare_masina'.
Poți accesa numele de utilizator mai târziu într-un alt fișier PHP folosind
$username=$_SESSION['username'];

Mai întâi trebuie să inițiați o sesiune în WordPress, dar nu puteți începe o sesiune în WordPress așa, pur și simplu.
Înainte de a începe sesiunile, trebuie să verificați dacă un plugin a inițiat deja sesiunea, deoarece puteți întâmpina probleme neașteptate. De aceea aveți nevoie de un mic algoritm pentru asta.
if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
if(function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
session_start(apply_filters( 'cf_geoplugin_php7_session_options', array(
'cache_limiter' => 'private_no_expire',
'read_and_close' => false
)));
}
}
else if (version_compare(PHP_VERSION, '5.4.0', '>=') && version_compare(PHP_VERSION, '7.0.0', '<'))
{
if (function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
session_cache_limiter('private_no_expire');
session_start();
}
}
else
{
if(session_id() == '') {
if(version_compare(PHP_VERSION, '4.0.0', '>=')){
session_cache_limiter('private_no_expire');
}
session_start();
}
}
Aici am adăugat și suport pentru versiunile mai vechi de PHP.

Pe pagina PHP care primește cererea AJAX, setează $_SESSION astfel:
$car_color = <datele introduse de utilizator în formular>;
$_SESSION['car_color'] = $car_color;
Accesează variabila $_SESSION
if(isset($_SESSION['car_color'])) {
$value = $_SESSION['car_color'];
} else {
$value = 'Te rugăm să selectezi o culoare pentru mașină.';
}
Acest tutorial explică mai în detaliu configurarea corectă și gestionarea sesiunilor.
