it-swarm.com.de

Wie kann ich die Variable $ id in der Formularfunktion des Widgets abrufen?

Wie kann ich die Variable $ id in der Formularfunktion des Widgets abrufen? Entsprechend der Widget-Struktur sehe ich, dass die Widget-Funktion $ args als Parameter hat, der im Rumpf der Funktion extrahiert wird. In meinem Fall möchte ich die Variable $ id (aus extrahierten $ args) verwenden, die die ID der aktuellen Seitenleiste enthält. Wie kann ich die Variable $ id in der Formularfunktion "sichtbar" machen? Irgendwelche Ideen?

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 ) {}
}

Zum Beispiel haben wir eine Seitenleiste mit der ID 'my_sidebar'. Ich habe dieses Widget eingefügt. Zum Beispiel sieht meine Widget-Funktion, mit der wir etwas auf einer Seite ausgeben, so aus:

function widget($args, $instance) {
         extract($args);
         echo $id; //or just echo $args['id'];
}

Auf meiner Seite wird in der Seitenleiste "my_sidebar" der Text "my_sidebar" angezeigt. Das ist großartig. Aber wie kann ich diese $ id oder $ args ['id'] in der Formularfunktion des Widgets erhalten. Im Klassenbeispiel sehe ich, dass nur die Widget-Funktion $ args als Argument akzeptiert. Ich bin kein Experte für OOP Diagramme. Ich habe versucht, eine statische Variable zu erstellen (ohne Erfolg), die den ID-Wert beibehält:

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

Vielleicht Wordpress Call Form-Funktion zuerst, bevor Widget-Funktion, deshalb kann ich nichts auf meinem Formular sehen .... trotzdem irgendwelche Ideen, wie man dieses Problem löst?

5
user13250

Suchen Sie nach $args['widget_id']? Speichern Sie es einfach in einer Variablen, auf die Sie später in form() zugreifen können.

Sehen Sie sich wp-includes/default-widgets.php an, um zu sehen, wie Widgets funktionieren. Nicht der beste Code, aber er sollte Ihnen einige Hinweise geben.

1
fuxia

Als Antwort auf @toscho könnten Sie möglicherweise die aktuelle Seitenleiste (die das Widget enthält) über die DB-Optionentabelle abrufen:

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

Nicht getestet

0
kaiser