การใช้ตัวเลือกวิดเจ็ต 'นอก' วิดเจ็ต


13

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

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

รหัสจากวิดเจ็ต / ปลั๊กอิน:

 function widget($args, $instance){
  extract($args);
  $title = apply_filters('widget_title', empty($instance['title']) ? 'Choose a service' : $instance['title']);
  $lineOne = empty($instance['username']) ? '' : $instance['username'];
  $lineTwo = empty($instance['password']) ? '' : $instance['password'];

  # Before the widget

  echo $before_widget; // etc...

หน้าผลลัพธ์ ...

$url = "http://www.nhs.uk/NHSCWS/Services/ServicesSearch.aspx?user=".[USERNAME]."&pwd=".[PASSWORD]."&q=".$_POST['PostCode']."&type=".$_POST['ServiceType']."";

ยังคงเรียนรู้ว่า WP แฮงค์กันอย่างไรขออภัยสำหรับคำถาม n00b

คำตอบ:


16

@ JonathonByrd อาจเป็นคำตอบที่ 'ดีที่สุด' แน่นอนคุณควรใช้get_optionถ้าเป็นไปได้เนื่องจากไม่มีการรับประกันชื่อตัวเลือกจะยังคงเหมือนเดิมระหว่างรุ่น WordPress

ในทำนองเดียวกัน - @JonathonByrd ยังพึ่งพาการใช้ตัวแปรทั่วโลกซึ่งอาจถูกลบ / เปลี่ยนชื่อ (แม้ว่าอาจไม่น่าเป็นไปได้มาก)

น่าเสียดายที่ไม่มีแผ่นปิดสาธารณะที่เราสามารถใช้ได้ วิธีที่ใกล้เคียงที่สุดคือget_settingsคลาสของ Widget ของคุณ สมมติว่าคุณเป็นคลาสวิดเจ็ตMy_Widget_Classแล้ว:

 $dummy = new My_Widget_Class();
 $settings = $dummy->get_settings();

$settingsarray(instance number => settings)หลังจากนั้นก็เป็นอาร์เรย์ของฟอร์ม โดยทั่วไปแล้ววิดเจ็ตของคุณจะมี ID เช่นmy-widget-class-3- และ 'หมายเลขอินสแตนซ์' ที่นี่คือ 3 และอื่น ๆ

 $settings[3]

จะช่วยให้การตั้งค่า (เป็นอาร์เรย์) my-widget-class-3สำหรับเครื่องมือ ฉันรู้สึกว่านี่เป็นวิธีการพิสูจน์ที่เชื่อถือได้และในอนาคต


4

ไม่ใช่คำถาม noob เลย

คุณจะต้องจุ่มลงใน MySQL (ใช้ PhpMyAdmin หรือคล้ายกัน) และรับชื่อของตัวเลือกแรก SQL ต่อไปนี้จะแสดงรายการตัวเลือกวิดเจ็ต:

SELECT *
FROM `wp_options`
WHERE `option_name`
REGEXP '^widget_'
LIMIT 0 , 30

จากนั้นในเทมเพลตของคุณ (หรือโพสต์ / หน้าด้วยปลั๊กอิน php exec บางประเภท) คุณสามารถget_option():

<?php echo get_option('your_widget_option_name'); ?>

และ voila!


ขอบคุณ แต่ไม่มีอะไรส่งคืนจากแบบสอบถามแบบใช้เลือกข้อมูล
JohnnyBizzle

มันแปลกมาก ชื่อของปลั๊กอินที่ให้บริการวิดเจ็ตคืออะไร?
Tom Wright

4

global $wp_registered_widgetsทั้งหมดของเครื่องมือและตัวเลือกของพวกเขาจะถูกเก็บไว้ภายใน เพียงโหลดตัวแปรนี้และพิมพ์เนื้อหาเพื่อค้นหาตัวเลือกวิดเจ็ตที่คุณต้องการ


3

ฉันใช้วิธีการแนะนำของ Stephen Harris

$dummy = new My_Widget_Class();
$settings = $dummy->get_settings();
$settings = reset($settings);

รีเซ็ต () ให้ค่าคีย์แรกจากอาร์เรย์หากคุณไม่ทราบว่า ID ของวิดเจ็ตของคุณคืออะไร

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


0

บางทีฉันกำลังอ่านคำถามของคุณผิด แต่ดูเหมือนว่าสิ่งที่คุณต้องการทำคือบันทึกตัวเลือกหรือข้อมูลจากวิดเจ็ตของคุณ (ชื่อผู้ใช้และรหัสผ่าน) ที่ใดที่หนึ่งใน WordPress ซึ่งคุณสามารถเข้าถึงได้อีกครั้งนอกรหัสวิดเจ็ต . หากถูกต้องคุณจะต้องดูที่ฟังก์ชั่นadd_option () (เช่นเดียวกับ update_option () และ delete_option () ตามความจำเป็น)

หากต้องการตั้งค่าตัวเลือกให้ทำดังนี้

<?php add_option("my_widget_option_name", 'option_value'); ?>

จากนั้นคุณสามารถเรียกดูได้ทุกที่ภายใน WP โดยเรียกใช้ get_option ดังนี้:

<?php $option_val = get_option("my_widget_option_name"); ?>

คุณช่วยอธิบายอีกเล็กน้อยว่าคุณพยายามทำอะไรได้บ้าง แนวคิดในการตั้งชื่อผู้ใช้และรหัสผ่านสำหรับบริการในรูปแบบวิดเจ็ตแล้วส่งต่อไปยังบริการในทุก ๆ หน้าโหลดเพื่อส่งเนื้อหาบางส่วนไปยังผู้ใช้เว็บไซต์ (โดยไม่แสดงชื่อผู้ใช้และรหัสผ่าน)

โอเคขอบคุณจะลองดู ตอนนี้ฉันยุ่งมากส่วนหนึ่งเป็นเพราะความกดดันด้านเวลา
JohnnyBizzle

เพื่ออธิบายเพิ่มเติมเครื่องมือโพสต์ 2 ตัวเลือกบริการที่จำเป็นและรหัสไปรษณีย์ แบบฟอร์มส่งไปยังหน้าเฉพาะ (ฉันรู้ว่าฉันสามารถใช้หน้าปัจจุบัน) ซึ่งฉันเรียกว่าผลลัพธ์การค้นหา ผลการค้นหาใช้ตัวเลือกที่ฉันส่งผ่านไปยัง url ที่เรียกใช้บริการเว็บ ผลลัพธ์จะกลับมาเป็น XML ซึ่งได้รับการส่งผ่านไปยังอาร์เรย์แล้วส่งออกไปยังผู้ใช้ เว็บไซต์นี้ใช้ webservice เดียวกัน: camden.nhs.uk/nhs-search-results.htm?type=1&q=E17
JohnnyBizzle

... ความตั้งใจคือการใช้พารามิเตอร์สำหรับชื่อผู้ใช้ / pwd สำหรับเว็บเซอร์เพื่อให้เว็บไซต์อื่น ๆ สามารถใช้วิดเจ็ตเดียวกันได้
JohnnyBizzle

ตกลงดังนั้นเจ้าของไซต์จะต้องป้อนชื่อผู้ใช้และรหัสผ่านของตนเองถูกต้องหรือไม่ เมื่อพวกเขาทำเช่นนั้นแล้วมันจะใช้ข้อมูลนั้นเพื่อดึง XML จากเว็บไซต์อื่นแล้วแสดง ในกรณีนั้นคุณต้องการใช้ get_option และ add_option ฟังก์ชั่น Apply_filters ทำงานบนด้านการแสดงผลของสิ่งต่าง ๆ - เช่นมันไม่ได้เปลี่ยนข้อมูลในฐานข้อมูลของคุณมันจะปรับเปลี่ยนมันก่อนที่มันจะแสดงให้ผู้ใช้ปลายทาง ดูเหมือนว่าคุณต้องการที่จะใช้ในการป้อนแบบฟอร์มในเครื่องมือและบันทึกด้วย add_option ไซต์นี้มีบทช่วยสอนที่ยอดเยี่ยม: valums.com/create-wordpress-widget
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.