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


13

ウィジェットオプションにいくつかのパラメーターを保存して、別のページに渡します。ウィジェットは、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の質問には申し訳ありません。

回答:


16

@JonathonByrdの答えはおそらく「ベスト」ですget_option。WordPressのバージョン間でオプション名が同じであるという保証はないため、可能な限り使用する必要があります。

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

残念ながら、確実に使用できるパブリックラッパーはありません。最も近いのは、get_settingsウィジェットクラスのメソッドです。あなたがウィジェットクラスであると仮定してみましょうMy_Widget_Class、その後:

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

$settingsの形式の配列です array(instance number => settings)。通常、ウィジェットには次のようなIDがありますmy-widget-class-3-ここの「インスタンス番号」は3です。

 $settings[3]

ウィジェットの設定を(配列として)提供しますmy-widget-class-3。これは、より信頼性が高く、将来性のある方法だと感じています。


4

noobの質問ではありません。

(PhpMyAdminなどを使用して)MySQLに浸り、最初にオプションの名前を取得する必要があります。次の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'); ?>

出来上がり!


Thxですが、選択クエリからは何も返されません。
ジョニービズル

それは変です。ウィジェットを提供するプラグインの名前は何ですか?
トム・ライト

4

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


3

私はStephen Harrisが提案した方法を使用しました。

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

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

注:ウィジェットの複数のコピーがアクティブになっている場合は役に立ちません。ウィジェットの最初のコピーの設定のみを返すためです。


0

おそらくあなたの質問を誤解していますが、あなたがしようとしているのは、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"); ?>

あなたがやろうとしていることをもう少し説明できますか?ウィジェット形式でサービスのユーザー名とパスワードを設定し、ページの読み込みごとにそれらをサービスに渡して、Webサイトユーザーにコンテンツを配信する(ユーザー名とパスワードを表示せずに)アイデアはありますか?

はい、ありがとう、試してみます。私は現時点では、時間的なプレッシャーのために混乱しています。
ジョニービズル

さらに説明するために、ウィジェットには2つのオプション、サービスが必要、郵便番号があります。フォームは、検索結果と呼ばれる特定のページ(現在のページを使用できることを知っています)に送信します。検索結果には、Webサービスを呼び出すURLに渡すオプションが使用されます。結果はXMLとして返され、配列に渡されてユーザーに出力されます。このサイトは同じWebサービス
&

...意図は、他のサイトが同じウィジェットを使用できるように、Webサービスのユーザー名/パスワードのパラメーターを使用することでした。
ジョニービズル

では、サイト所有者は自分のユーザー名とパスワードを入力する必要がありますか?一度それを行うと、その情報を使用して他のサイトからXMLを取得し、表示します。その場合、get_optionとadd_optionを使用する必要があります。apply_filters関数は、モノの表示側で機能します。つまり、データベース内のデータを変更せず、エンドユーザーに表示される前にデータを変更します。ウィジェットのフォーム入力を取り込み、add_optionで保存したいようです。このサイトには素晴らしいチュートリアルがあります:valums.com/create-wordpress-widget
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.