Jak przechowywać i odbierać zmienne w sesjach WP?

28

Mam formularz z niektórymi polami wyboru i wejściowymi polami wyboru i pokazuje, czego użytkownik chce za pośrednictwem wywołania ajax. Problem polega na tym, że gdy użytkownik kliknie element i wyświetli się strona ze szczegółami, a następnie zdecyduje się wrócić do poprzedniej strony, musi kliknąć i ponownie wybrać poprzedni wybór.

Chciałbym, aby WP zapisał wszystkie opcje w sesji po kliknięciu przycisku strony ze szczegółami i zapisał rzeczywiste informacje w sesji, a następnie, gdy ponownie odwiedza stronę, wartości będą wyszukiwane w sesjach i ustawiane, jeśli jakieś są uznany.

Czy można to zrobić w WP?

Jeśli tak to jak?

Uproszczmy to i powiedzmy, że mamy coś takiego w naszej formie:

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

Nie używam przycisku Prześlij w moim formularzu, jest obsługiwany przez AJAX przy zmianie danych wejściowych.

A w moich wynikach uzyskaj przez ajax Mam link do strony szczegółów:

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

Wiesz, jak mogę przechowywać moje wartości w Sesji i wywoływać je podczas ponownego odwiedzania / ponownego ładowania / powrotu w przeglądarce?

Muszę być w stanie odczytać zawartość sesji i korzystać z niej za pomocą? Javascript? i uruchom moją funkcję wyszukiwania przez ajax, która już działa dobrze.

Muszę tylko zapisać (prawdopodobnie przed przejściem do $ link w szczegółach według przycisku szczegółów oraz odczytać i wysłać zmienne sesji (jeśli istnieją).

Derfder
źródło
Jeśli odpowiedź była dla Ciebie pomocna, rozważ ją. Zobacz » Co powinienem zrobić, gdy ktoś odpowie na moje pytanie? «I / lub» Dlaczego głosowanie jest ważne? «Więcej informacji na temat modelu rozwoju WordPress można znaleźć w centrum pomocy .
Nicolai
Myślę, że poniższy link pomoże ci. wordpress.stackexchange.com/questions/105453/…
Vivekanand Saraswati

Odpowiedzi:

32

Sesje nie są domyślnie włączone w wordpress, jeśli chcesz aktywować sesje php, dodaj to na początku functions.php:

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

Teraz możesz użyć $_SESSION['your-var'] = 'your-value';do ustawienia zmiennej sesji. Zajrzyj do dokumentacji PHP dotyczącej sesji .



Aktualizacja:

Była druga odpowiedź, która, moim zdaniem, również miała wartość - niestety została usunięta, ponownie dodam informacje tutaj. Odpowiedź dotyczyła wtyczki WP Session Manager jako rozwiązania alternatywnego napisanego przez @eamann.
Przeczytałem kilka rzeczy o wtyczce, ale nigdy jej nie użyłem, ponieważ - jak dotąd - trzymam się sesji PHP - nigdy nie miałem problemu, że nie mogłem z nich korzystać. Jest to stwierdzenie / komentarz samego autora wtyczki, które znalazłem na temat niektórych możliwych zalet.

Nicolai
źródło
czy mogę prosić o spojrzenie na niestandardowe pytanie związane z polem tutaj: wordpress.stackexchange.com/questions/265852/... ?
Istiaque Ahmed
1

dodaj to w pliku functions.php

<?php

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

add_action('init', 'tatwerat_startSession', 1);
Abdo-Host
źródło
1

Wyjaśnię, jak ustawić sesję nazwy użytkownika za pomocą wtyczki Native PHP Sessions for WordPress . Możesz zastosować tę logikę do swojego problemu.

Dodaj to do pliku functions.php

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

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

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

  }

$ _POST ['log'] odwołuje się do pola wprowadzania nazwy użytkownika z formularza logowania wordpress. Gdy użytkownik się loguje, nazwa użytkownika jest przechowywana w $ _SESSION ['nazwa użytkownika']. W twoim przypadku zmieniłbyś „log” na nazwy zmiennych formularza, które masz „car_color”.

Odwołaj się później do nazwy użytkownika w innym pliku php

$username=$_SESSION['username'];
embulldogs99
źródło
0

Być może w Wordpress nie ma zwykłych sesji ... w każdym razie Wordpress zna pojęcie użytkowników. Można zarządzać informacji dotyczących konkretnych użytkowników z funkcjami add_user_meta, update_user_meta, get_user_meta, i delete_user_meta.

Jeśli potrzebujesz informacji zapisanych w ten sposób w JavaScript, możesz napisać mały skrypt PHP, który wymiotuje to, czego potrzebujesz, i nazwać go Ajax.

Philipp Zedler
źródło
2
Jest to dobre tylko wtedy, gdy użytkownik jest zalogowany.
Tim Hallman
0

Na stronie PHP, która odbiera żądanie AJAX, ustaw $ _SESSION w ten sposób.

$car_color = <user selected form input data>;
$_SESSION['car_color'] = $car_color;

Uzyskaj dostęp do zmiennej $ _SESSION

if(isset($_SESSION['car_color'])) {
    $value = $_SESSION['car_color'];
} else {
    $value = 'Please select a car color.';
}

W tym samouczku omówiono bardziej szczegółowo prawidłowe konfigurowanie i usuwanie sesji.

Nu Everest
źródło