web-dev-qa-db-ja.com

ウィジェットのフォーム関数で$ id変数を取得するにはどうすればいいですか?

ウィジェットのフォーム関数で$ 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が最初に、ウィジェット機能の前にフォーム機能を呼び出して、それが私が自分のフォーム上に何も見ることができない理由です....とにかく、どんな問題もこの問題を解決する方法?

5
user13250

$args['widget_id']を検索しますか?あとでform()にアクセスできる変数に保存するだけです。

ウィジェットがどのように機能するかを見るためにwp-includes/default-widgets.phpを見てください。最高のコードではありませんが、ヒントがいくつかあります。

1
fuxia

@toscho回答のフォローアップとして、DBオプションテーブルを介して現在のサイドバー(ウィジェットを保持している)を取得することができます。

$current_sidebar = array_search( 
    "{$this->id_base}-{$this->number}", 
    get_option( 'sidebars_widgets' ), 
    true 
);

未検証

0
kaiser