Widget seçeneklerini 'widget'ın dışında' kullanma


13

Daha sonra başka bir sayfaya geçirilen widget seçeneklerinde bazı parametreleri kaydetmek istiyorum. Widget, bir web servisini çağıran bir formdur.

Geçmek istediğim seçenekler, şu anda sonuçlar sayfasına (şablon olarak yapılır) sabit olarak kodlanmış web hizmeti için kimlik doğrulamasıdır. Bu nedenle web sitesi kullanıcısından gizlenmelidir.

Widget / eklentiden kod:

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

Sonuçlar sayfası ...

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

WP'nin nasıl birbirine bağlandığını hala öğreniyorum, n00b sorusu için çok üzgünüm.

Yanıtlar:


16

@ JonathonByrd'ın cevabı muhtemelen 'en iyisidir' - get_optionseçenek adının WordPress sürümleri arasında aynı kalacağının garantisi olmadığından kesinlikle mümkünse kullanmalısınız .

Benzer şekilde - @JonathonByrd, kaldırılabilen / yeniden adlandırılabilen (belki de çok olası olmasa da) global bir değişken kullanmaya dayanır.

Ne yazık ki güvenilir bir şekilde kullanabileceğimiz hiçbir kamu sargısı yok. En yakın get_settingsWidget sınıfının yöntemidir. Widget sınıfınız olduğunu varsayalım My_Widget_Class:

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

$settingssonra formun bir dizisidir array(instance number => settings). Genellikle widget'ınız gibi herhangi bir kimliğe sahip olur my-widget-class-3- ve buradaki 'örnek numarası' 3'tür.

 $settings[3]

widget için ayarları (dizi olarak) verir my-widget-class-3. Bu daha güvenilir ve geleceğe dönük bir yöntemdir.


4

Hiç çaylak bir soru değil.

MySQL'e daldırmanız (PhpMyAdmin veya benzeri kullanarak) ve önce seçeneğin adını almanız gerekir. Aşağıdaki SQL, widget seçeneklerini listeler:

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

Sonra şablonunuzda (veya yazı / sayfa php exec eklentisi ile) bunu get_option()beğenebilirsiniz:

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

Et voila!


Thx ama hiçbir şey seçme sorgusu döndürdü.
JohnnyBizzle

Bu garip. Widget sağlayan eklentinin adı nedir?
Tom Wright

4

Tüm widget'lar ve seçenekleri içinde saklanır global $wp_registered_widgets. Aradığınız bu widget seçeneklerini bulmak için bu değişkeni yükleyin ve içeriği yazdırın.


3

Stephen Harris'in önerdiği yöntemi kullandım.

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

Widget'ınızın kimliğini bilmiyorsanız, reset () diziden ilk anahtar değerini verir.

Not: Widget'ın birden fazla kopyası etkinse yardımcı olmaz. Çünkü yalnızca widget'in ilk kopyasının ayarlarını döndürür.


0

Belki de sorunuzu yanlış okuyorum, ancak yapmak istediğiniz şey, widget'ınızdaki bazı seçenekleri veya bilgileri WordPress'te bir yere kaydetmektir, burada widget kodunun dışında onlara yeniden erişebilirsiniz . Doğruysa , add_option () işlevine (gerektiği gibi update_option () ve delete_option ()) bakmak istersiniz.

Bir seçenek belirlemek için şunu yapın:

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

Daha sonra aşağıdaki gibi get_option'ı çağırarak WP içinde herhangi bir yere alabilirsiniz:

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

Ne yapmaya çalıştığınızı biraz daha açıklayabilir misiniz? Hizmetin kullanıcı adını ve parolasını bir widget biçiminde ayarlamak ve daha sonra web sitesi kullanıcısına (kullanıcı adını ve parolayı göstermeden) içerik sunmak için bunları her sayfa yükündeki hizmete iletmek mi?

Tamam teşekkürler, bir deneyin. Şu anda, kısmen zaman baskısından dolayı çamurluyorum.
JohnnyBizzle

Daha fazla açıklamak için, widget 2 seçenek, Servis gerekli ve Posta Kodu gönderir. Form, arama sonuçları olarak adlandırdığım belirli bir sayfaya (geçerli sayfayı kullanabileceğimi biliyorum) gönderir. Arama sonuçları, web servisini çağıran URL'ye geçirdiğim seçenekleri alır. Sonuçlar bir diziye aktarılan ve daha sonra kullanıcıya gönderilen XML olarak geri gelir. Bu site aynı web hizmetini kullanıyor: camden.nhs.uk/nhs-search-results.htm?type=1&q=E17
JohnnyBizzle

... amaç, diğer sitelerin aynı widget'ı kullanabilmesi için web hizmeti için kullanıcı adı / pwd parametrelerini kullanmaktı.
JohnnyBizzle

Tamam, site sahiplerinin kendi kullanıcı adlarını ve şifrelerini girmeleri gerekecek, değil mi? Bunu yaptıktan sonra, XML'i diğer siteden çekmek ve sonra görüntülemek için bu bilgileri kullanır. Bu durumda, get_option ve add_option kullanmak istersiniz. Apply_filters işlevi şeylerin ekran tarafında çalışır - yani veritabanınızdaki verileri değiştirmez, son kullanıcıya gösterilmeden önce değiştirir. Widget içindeki form girişini almak ve add_option ile kaydetmek istediğiniz gibi geliyor. Bu sitenin harika bir öğreticisi var: valums.com/create-wordpress-widget
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.