Menggunakan opsi widget 'di luar' widget

13

Saya ingin menyimpan beberapa parameter dalam opsi widget yang kemudian diteruskan ke halaman lain. Widget adalah formulir yang memanggil layanan web.

Opsi yang ingin saya sampaikan adalah otentikasi untuk layanan web yang saat ini dikodekan ke dalam halaman hasil (dilakukan sebagai templat). Karena itu mereka harus disembunyikan dari pengguna situs web.

Kode dari widget / plugin:

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

Halaman hasil ...

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

Masih belajar bagaimana WP bergaul bersama, mohon maaf untuk pertanyaan n00b.

JohnnyBizzle
sumber

Jawaban:

16

Jawaban @ JonathonByrd mungkin 'terbaik' - tentu saja Anda harus menggunakan get_optionjika memungkinkan, karena tidak ada jaminan nama opsi akan tetap sama di antara versi WordPress.

Demikian pula - @JonathonByrd juga bergantung pada penggunaan variabel global yang dapat dihapus / diganti namanya (meskipun mungkin sangat tidak mungkin).

Sayangnya tidak ada pembungkus umum yang dapat kami gunakan dengan andal. Yang paling dekat adalah get_settingsmetode kelas Widget Anda. Misalkan kelas widget Anda adalah My_Widget_Class, maka:

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

$settingskemudian merupakan array dari formulir array(instance number => settings). Biasanya widget Anda akan memiliki ID seperti my-widget-class-3- dan 'nomor contoh' di sini adalah 3, dan seterusnya

 $settings[3]

memberikan pengaturan (sebagai array) untuk widget my-widget-class-3. Saya merasa ini adalah metode pembuktian yang lebih andal dan di masa depan.

Stephen Harris
sumber
4

Sama sekali bukan pertanyaan noob.

Anda harus masuk ke MySQL (menggunakan PhpMyAdmin atau yang serupa) dan mendapatkan nama opsi terlebih dahulu. SQL berikut akan mencantumkan opsi widget:

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

Kemudian di templat Anda (atau posting / halaman dengan semacam plugin php exec) Anda bisa get_option()seperti ini:

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

Et voila!

Tom Wright
sumber
Terima kasih tetapi tidak ada yang dikembalikan dari kueri pemilihan.
JohnnyBizzle
Itu aneh. Apa nama plugin yang menyediakan widget?
Tom Wright
4

Semua widget dan opsinya disimpan di dalamnya global $wp_registered_widgets. Cukup muat variabel ini dan cetak konten untuk menemukan opsi widget yang Anda cari.

Konsultan E-niaga
sumber
3

Saya menggunakan metode yang disarankan Stephen Harris.

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

reset () memberikan nilai kunci pertama dari array, jika Anda tidak tahu apa ID widget Anda.

Catatan: Tidak membantu jika ada beberapa salinan widget yang aktif. Karena itu mengembalikan pengaturan salinan widget pertama saja.

Ulugov
sumber
0

Mungkin saya salah membaca pertanyaan Anda, tetapi sepertinya yang ingin Anda lakukan adalah menyimpan beberapa opsi atau info dari widget Anda (nama pengguna dan kata sandi) di suatu tempat di WordPress tempat Anda dapat mengaksesnya kembali di luar kode widget . Jika itu benar, Anda akan ingin melihat fungsi add_option () (serta update_option () dan delete_option () seperlunya).

Untuk mengatur opsi, lakukan saja ini:

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

Anda kemudian dapat mengambilnya di mana saja dalam WP dengan memanggil get_option seperti ini:

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

sumber
Bisakah Anda menjelaskan sedikit lagi apa yang sedang Anda coba lakukan? Apakah ide untuk menetapkan nama pengguna dan kata sandi untuk layanan dalam bentuk widget dan kemudian meneruskannya ke layanan pada setiap pemuatan halaman untuk mengirimkan beberapa konten ke pengguna situs web (tanpa menampilkan nama pengguna dan kata sandi)?
Ok terima kasih, akan mencobanya. Saya kacau pada saat ini, sebagian karena tekanan waktu.
JohnnyBizzle
Untuk menjelaskan lebih lanjut, widget memposting 2 opsi, Layanan diperlukan dan Kode Pos. Formulir dikirimkan ke halaman tertentu (saya tahu saya bisa menggunakan halaman saat ini) yang saya sebut hasil pencarian. Hasil pencarian mengambil opsi yang saya sampaikan ke url memanggil layanan web. Hasilnya kembali sebagai XML yang diteruskan ke dalam array dan kemudian output ke pengguna. Situs ini menggunakan layanan web yang sama: camden.nhs.uk/nhs-search-results.htm?type=1&q=E17
JohnnyBizzle
... maksudnya adalah menggunakan parameter untuk nama pengguna / pwd untuk layanan web sehingga situs lain dapat menggunakan widget yang sama.
JohnnyBizzle
Oke, jadi pemilik situs perlu memasukkan nama pengguna dan kata sandi mereka sendiri, benar? Setelah mereka melakukannya, ia menggunakan info itu untuk menarik XML dari situs lain dan kemudian menampilkannya. Dalam hal ini, Anda ingin menggunakan get_option dan add_option. Fungsi apply_filters bekerja di sisi tampilan hal - yaitu tidak mengubah data dalam database Anda, itu memodifikasinya sebelum ditampilkan kepada pengguna akhir. Sepertinya Anda ingin mengambil input formulir di widget dan menyimpannya dengan add_option. Situs ini memiliki tutorial yang sangat bagus: valums.com/create-wordpress-widget