Cum să stocăm și să primim variabile în sesiunile WordPress?

9 oct. 2013, 16:53:25
Vizualizări: 158K
Voturi: 37

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ă).

2
Comentarii

Dacă răspunsul ți-a fost de folos, atunci ia în considerare acceptarea acestuia. Vezi »Ce ar trebui să fac când cineva îmi răspunde la întrebare?« și/sau »De ce este important votul?«, mai multe informații despre modelul [wordpress.se] sunt disponibile la [ajutor].

Nicolai Grossherr Nicolai Grossherr
29 apr. 2015 15:34:06

Cred că următorul link te va ajuta. https://wordpress.stackexchange.com/questions/105453/getting-headers-already-sent-error-from-plugin

Vivekanand Saraswati Vivekanand Saraswati
4 oct. 2018 16:36:32
Toate răspunsurile la întrebare 6
0
47

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.

9 oct. 2013 17:54:40
0

adaugă acest cod în functions.php

<?php

function tatwerat_startSession() {
    if(!session_id()) {
        session_start();
    }
}

add_action('init', 'tatwerat_startSession', 1);
14 iun. 2017 12:39:46
1

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.

12 aug. 2016 23:57:26
Comentarii

Acest lucru este bun doar dacă utilizatorul este autentificat.

Tim Hallman Tim Hallman
10 nov. 2016 20:31:06
0

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'];
5 aug. 2018 23:43:56
0

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.

31 aug. 2020 17:35:17
0

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.

5 dec. 2016 22:00:28