ウィジェットのフォーム関数で$ id変数を取得するにはどうすればいいですか?ウィジェットの構造によれば、ウィジェット関数はパラメータとして$ argsを持ち、それは関数の本体から抽出されます。私の場合、私は現在のサイドバーのIDを含む(抽出された$ argsから)$ id変数を使いたいのです。フォーム関数で 'visible' $ id変数を作るにはどうすればいいですか?何か案は?
class Ex_Widget_Example extends WP_Widget {
//constructor goes here
function widget($args, $instance) {extract($args);}
function update($new_instance, $old_instance ) { }
function form( $instance ) {}
}
たとえば、サイドバーのIDが「my_sidebar」です。このウィジェットを入れます。たとえば、ページ上で何かを出力するために使用する私のウィジェット関数は、次のようになります。
function widget($args, $instance) {
extract($args);
echo $id; //or just echo $args['id'];
}
だから私のページでは、私の 'my_sidebar'サイドバーに 'my_sidebar'というテキストが表示されます。それは素晴らしいことです。しかしどのように私はウィジェットのフォーム関数でこの$ idまたは$ args ['id']を得ることができますか。私が見たクラスの例では、ウィジェット関数だけが引数として$ argsを取ります。私はOOPのプログラミングのエキスパートではありません。静的変数を作成しようとしましたが(失敗しましたが)、id値を保持することになります。
class Ex_Widget_Example extends WP_Widget {
public static $widget_id;
//constructor goes here
function widget($args, $instance) {
extract($args);
self::$widget_id = $id;
echo self::$widget_id //here outputs sidebar's id perfectly on my page
}
function update($new_instance, $old_instance ) { }
function form( $instance ) {
echo self::$widget_id //here outputs nothing on my widget's form
}
}
たぶん、WordPressが最初に、ウィジェット機能の前にフォーム機能を呼び出して、それが私が自分のフォーム上に何も見ることができない理由です....とにかく、どんな問題もこの問題を解決する方法?
$args['widget_id']
を検索しますか?あとでform()
にアクセスできる変数に保存するだけです。
ウィジェットがどのように機能するかを見るためにwp-includes/default-widgets.php
を見てください。最高のコードではありませんが、ヒントがいくつかあります。
@toscho回答のフォローアップとして、DBオプションテーブルを介して現在のサイドバー(ウィジェットを保持している)を取得することができます。
$current_sidebar = array_search(
"{$this->id_base}-{$this->number}",
get_option( 'sidebars_widgets' ),
true
);
未検証