Come memorizzare e recuperare variabili nelle sessioni WordPress?

9 ott 2013, 16:53:25
Visualizzazioni: 158K
Voti: 37

Ho un modulo con alcuni checkbox, campi di input e selectbox che mostra ciò che l'utente desidera tramite una chiamata ajax. Il problema è che quando l'utente clicca sull'elemento e viene mostrata la pagina dei dettagli, e poi decide di tornare alla pagina precedente, deve ricliccare e riselezionare la sua scelta precedente.

Vorrei fare in modo che WordPress memorizzi tutte le opzioni nella sessione quando viene cliccato il pulsante per la pagina dei dettagli e salvi le informazioni attuali nella sessione, e poi quando l'utente visita nuovamente la pagina, i valori vengano controllati nelle sessioni e impostati se ne vengono trovati.

Si può fare in WordPress?

Se sì, come?

Semplifichiamo al massimo e diciamo che abbiamo qualcosa del genere nel nostro modulo:

<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" />

Non uso il pulsante submit nel mio modulo, viene gestito tramite AJAX al cambio dell'input.

E nei miei risultati ottenuti tramite ajax ho un link alla pagina dei dettagli:

<a class="detail-info-link" href="<?php echo $url ?>">

Qualche idea su come posso memorizzare i miei valori nella Sessione e richiamarli quando si rivisita/ricarica/usa il pulsante indietro nel browser?

Ho bisogno di poter leggere i dati memorizzati nella sessione e utilizzarli tramite Javascript e attivare la mia funzione di ricerca tramite ajax che sta già funzionando bene.

Ho solo bisogno di memorizzare (probabilmente prima di andare al $link nell'href del pulsante dettagli e leggere e inviare le variabili di sessione (se esistono).

2
Commenti

Se la risposta ti è stata utile, considera di accettarla. Vedi »Cosa devo fare quando qualcuno risponde alla mia domanda?« e/o »Perché è importante votare?«, maggiori informazioni sul modello [wordpress.se] sono disponibili nella [guida].

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

Penso che il link qui sotto possa esserti utile. https://wordpress.stackexchange.com/questions/105453/getting-headers-already-sent-error-from-plugin

Vivekanand Saraswati Vivekanand Saraswati
4 ott 2018 16:36:32
Tutte le risposte alla domanda 6
0
47

Le sessioni non sono abilitate in WordPress di default, se vuoi attivare le sessioni PHP aggiungi questo all'inizio del tuo functions.php:

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

Ora puoi usare $_SESSION['tuo-var'] = 'tuo-valore'; per impostare una variabile di sessione. Dai un'occhiata alla documentazione PHP sulle sessioni.



Aggiornamento:

C'era una seconda risposta che, secondo me, aveva anche valore - purtroppo è stata eliminata, quindi la riaggiungo qui. La risposta si riferiva a WP Session Manager, un plugin scritto da @eamann come soluzione alternativa.
Ho letto alcune cose su questo plugin, ma non l'ho mai usato perché - finora - ho continuato a usare le sessioni PHP e non ho mai avuto problemi. Questo è un commento/dichiarazione dell'autore del plugin stesso che ho trovato riguardo ad alcuni possibili vantaggi.

9 ott 2013 17:54:40
0

aggiungi questo nel tuo functions.php

<?php

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

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

Forse non ci sono le sessioni tradizionali in WordPress... tuttavia, WordPress conosce il concetto di utenti. Puoi gestire informazioni relative a utenti specifici utilizzando le funzioni add_user_meta, update_user_meta, get_user_meta e delete_user_meta.

Se hai bisogno di accedere a queste informazioni in JavaScript, puoi scrivere un piccolo script PHP che restituisce i dati necessari e chiamarlo tramite Ajax.

12 ago 2016 23:57:26
Commenti

Questo è utile solo se l'utente è loggato.

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

Ti spiegherò come impostare una sessione per il nome utente con il plugin Native PHP Sessions for WordPress. Puoi applicare questa logica al tuo problema.

Aggiungi questo al tuo file functions.php

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

  if ( isset( $_POST['wp-submit'] ) ){

    $_SESSION['username']=$_POST['log'];

  }

$_POST['log'] fa riferimento al campo di input del nome utente nel form di login di WordPress. Quando un utente effettua il login, il nome utente viene memorizzato in $_SESSION['username']. Nel tuo caso, dovresti cambiare 'log' con i nomi delle variabili del form che hai, ad esempio 'car_color'.

Puoi richiamare il nome utente successivamente in un altro file php con

$username=$_SESSION['username'];
5 ago 2018 23:43:56
0

Devi prima avviare una sessione in WordPress ma non puoi iniziare una sessione in WordPress così semplicemente.

Prima di avviare le sessioni, è necessario verificare se qualche plugin ha già avviato la sessione in precedenza perché potresti riscontrare problemi imprevisti. Quindi hai bisogno di un piccolo algoritmo per questo.

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();
    }
}

Ho anche aggiunto il supporto per le versioni più vecchie di PHP qui.

31 ago 2020 17:35:17
0

Sulla pagina PHP che riceve la richiesta AJAX, imposta $_SESSION in questo modo.

$car_color = <dati selezionati dall'utente nel form>;
$_SESSION['car_color'] = $car_color;

Accedi alla variabile $_SESSION

if(isset($_SESSION['car_color'])) {
    $value = $_SESSION['car_color'];
} else {
    $value = 'Seleziona un colore per la macchina.';
}

Questo tutorial approfondisce la configurazione corretta e la gestione delle sessioni.

5 dic 2016 22:00:28