web-dev-qa-db-ja.com

ウィジェットの「外側」のウィジェットオプションを使用する

いくつかのパラメータをウィジェットのオプションに保存し、それを別のページに渡します。ウィジェットはWebサービスを呼び出すフォームです。

私が渡したいオプションは、現在結果ページにハードコーディングされているWebサービスの認証です(テンプレートとして行われます)。したがって、それらはWebサイトユーザーから隠されるべきです。

ウィジェット/プラグインからのコード:

 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の質問をお詫び申し上げます。

11
JohnnyBizzle

@ JonathonByrdの答えはおそらく「最善」です - 確かに可能であればget_optionを使うべきです、なぜならオプション名がWordPressのバージョン間で同じままであるという保証はないので。

同様に - @JonathonByrdもグローバル変数の使用に依存していますが、これは削除されたり名前が変更されたりする可能性があります(おそらく非常にまれですが)。

残念ながら、私たちが確実に使用できるパブリックラッパーはありません。一番近いのはあなたのWidgetクラスのget_settingsメソッドです。ウィジェットクラスがMy_Widget_Classであるとしましょう。

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

$settingsarray(instance number => settings)の形式の配列です。通常あなたのウィジェットはmy-widget-class-3のような任意のIDを持ちます - そしてここでの 'インスタンス番号'は3です。

 $settings[3]

ウィジェットmy-widget-class-3の設定を(配列として)与えます。これは私がより信頼できる将来の証明方法であると感じます。

16
Stephen Harris

全く問題ない質問ではありません。

(PhpMyAdminなどを使用して)MySQLにアクセスして、まずオプションの名前を取得する必要があります。次のSQLはウィジェットオプションをリストします。

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

それからあなたのテンプレート(あるいはある種のphp execプラグインを含むpost/page)では、 get_option() のようにできます:

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

Et voila!

4
Tom Wright

すべてのウィジェットとそのオプションはglobal $wp_registered_widgetsに格納されています。この変数をロードして内容を印刷するだけで、探しているウィジェットオプションを見つけることができます。

私はスティーブンハリスが提案した方法を使った。

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

ウィジェットのIDがわからない場合、reset()は配列の最初のキー値を返します。

注:ウィジェットのコピーが複数ある場合は、役に立ちません。ウィジェットの最初のコピーの設定のみを返すからです。

3
Ulugov

あなたの質問を誤解しているかもしれませんが、あなたがしたいのはあなたのウィジェットからいくつかのオプションや情報(ユーザー名とパスワード)をWordPressのどこかに保存し、ウィジェットコードの外側で再アクセスできることです。 。それが正しい場合は、 add_option() 関数(および必要に応じてupdate_option()およびdelete_option()も参照)を検討する必要があります。

オプションを設定するには、これをするだけです:

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

それから、次のようにget_optionを呼び出すことで、WP内の任意の場所に取得できます。

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