จะจัดเก็บและรับตัวแปรในเซสชัน WP ได้อย่างไร


28

ฉันมีแบบฟอร์มที่มีช่องทำเครื่องหมายและกล่องเลือกบางช่องและมันแสดงสิ่งที่ผู้ใช้ต้องการผ่านการโทร ajax ปัญหาคือเมื่อผู้ใช้คลิกที่รายการและหน้ารายละเอียดจะปรากฏขึ้นแล้วตัดสินใจกลับไปที่หน้าก่อนหน้าเขาต้องคลิกและเลือกตัวเลือกก่อนหน้าของเขาอีกครั้ง

ฉันต้องการให้ WP เก็บตัวเลือกทั้งหมดในเซสชันเมื่อมีการคลิกปุ่มไปที่หน้ารายละเอียดและบันทึกข้อมูลจริงในเซสชันจากนั้นเมื่อเขาเข้าชมหน้าอีกครั้งค่าจะถูกกำหนดในเซสชันและตั้งค่าหากมี พบ

ที่สามารถทำได้ใน WP?

ถ้าใช่เป็นอย่างไร

เรามาสรุปและบอกว่าเรามีอะไรแบบนี้ในรูปแบบของเรา:

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

ฉันไม่ใช้ปุ่มส่งในแบบฟอร์มของฉันจัดการผ่าน AJAX เมื่อมีการเปลี่ยนแปลงอินพุต

และในผลลัพธ์ของฉันผ่าน ajax ฉันมีลิงค์ไปยังหน้ารายละเอียด:

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

ความคิดใดที่ฉันสามารถเก็บค่าของฉันในเซสชันและเรียกพวกเขาเมื่อปุ่ม revisiting / reloading / back ในเบราว์เซอร์?

ฉันต้องสามารถอ่านเนื้อหาที่เก็บไว้ในเซสชันและใช้งานได้ผ่าน? Javascript? และเรียกใช้ fuction การค้นหาของฉันผ่าน ajax ซึ่งทำงานได้ดี

ฉันแค่ต้องเก็บ (อาจจะก่อนที่จะไป $ link ใน href ของโดยปุ่มรายละเอียดและอ่านและส่งตัวแปรเซสชั่น (ถ้ามี)


หากคำตอบนั้นมีประโยชน์กับคุณให้ลองตอบรับ ดู» ฉันควรทำอย่างไรเมื่อมีคนตอบคำถามของฉัน «และ / หรือ» ทำไมการลงคะแนนจึงสำคัญ? «ข้อมูลเพิ่มเติมเกี่ยวกับการพัฒนา WordPressรูปแบบที่มีอยู่ในศูนย์ช่วยเหลือ
Nicolai

ฉันคิดว่าลิงค์ด้านล่างจะช่วยคุณ wordpress.stackexchange.com/questions/105453/…
Vivekanand Saraswati

คำตอบ:


32

เซสชันที่ไม่ได้เปิดใช้งานใน wordpress โดยค่าเริ่มต้นถ้าคุณต้องการเปิดใช้งานเซสชัน php เพิ่มสิ่งนี้ที่จุดเริ่มต้นของคุณfunctions.php:

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

ตอนนี้คุณสามารถใช้$_SESSION['your-var'] = 'your-value';เพื่อตั้งค่าตัวแปรเซสชัน ลองดูที่เป็นเอกสาร PHP ในการประชุม



ปรับปรุง:

มีคำตอบที่สองซึ่งในใจของฉันมีค่าเช่นกัน - แต่น่าเสียดายที่มันถูกลบไปฉันกำลังเพิ่มข้อมูลที่นี่อีกครั้ง คำตอบคือการอ้างอิงถึงWP Session Managerปลั๊กอินที่เขียนโดย @eamann เป็นโซลูชันทางเลือก
ฉันอ่านบางอย่างเกี่ยวกับปลั๊กอิน แต่ไม่เคยใช้เพราะ - ฉันติดกับเซสชัน PHP - ไม่เคยมีปัญหาที่ฉันไม่สามารถใช้งานได้ นี่คือคำสั่ง / ความคิดเห็นโดยผู้เขียนปลั๊กอินตัวเองฉันพบเกี่ยวกับข้อได้เปรียบที่เป็นไปได้


ฉันขอให้คุณดูคำถามที่เกี่ยวข้องกับฟิลด์ที่กำหนดเองได้ที่นี่: wordpress.stackexchange.com/questions/265852/… ?
Istiaque Ahmed


1

ฉันจะอธิบายวิธีตั้งค่าเซสชันชื่อผู้ใช้ด้วยปลั๊กอินNative PHP Sessions สำหรับ WordPress คุณสามารถใช้ตรรกะนี้กับปัญหาของคุณ

เพิ่มไฟล์นี้ลงในไฟล์ functions.php ของคุณ

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

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

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

  }

$ _POST ['log'] กำลังอ้างถึงช่องใส่ชื่อผู้ใช้จากแบบฟอร์มล็อกอินของ WordPress เมื่อผู้ใช้ล็อกอินชื่อผู้ใช้จะถูกเก็บไว้ที่ $ _SESSION ['ชื่อผู้ใช้'] ในกรณีของคุณคุณจะเปลี่ยน 'บันทึก' เป็นชื่อตัวแปรแบบฟอร์มที่คุณมี 'car_color'

อ้างอิงชื่อผู้ใช้ในภายหลังในไฟล์ php อื่น ๆ โดย

$username=$_SESSION['username'];

0

อาจไม่มีเซสชันปกติใน Wordpress ... อย่างไรก็ตาม Wordpress รู้แนวคิดของผู้ใช้ คุณสามารถจัดการข้อมูลที่เกี่ยวข้องกับผู้ใช้งานที่เฉพาะเจาะจงกับฟังก์ชั่นadd_user_meta, update_user_meta, และget_user_metadelete_user_meta

หากคุณต้องการข้อมูลที่บันทึกไว้ด้วยวิธีนี้ใน JavaScript คุณสามารถเขียนสคริปต์ PHP เล็กน้อยที่ออกมาในสิ่งที่คุณต้องการและเรียกมันด้วย Ajax


2
สิ่งนี้จะดีก็ต่อเมื่อผู้ใช้ลงชื่อเข้าใช้
ทิมฮอลแมน

0

ในหน้า PHP ที่ได้รับคำขอ AJAX ให้ตั้งค่า $ _SESSION เช่นนี้

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

เข้าถึงตัวแปร $ _SESSION

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

บทช่วยสอนนี้มีรายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าและการกำจัดเซสชันที่เหมาะสม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.