Mehrere Einträge in get_option Ergebnissen? oder warum ist _multiwidget auf 1 gesetzt?

Ich entwickle ein WordPress-Widget und muss einige Benutzerkonfigurationswerte speichern, deshalb verwende ich WordPress update_option und get_option. Ich bin neu in der Widget-Entwicklung.

Ich habe einige Konfigurationsoptionen für das Widget, auf das ich von einer PHP-function zugreifen muss, die über Ajax aufgerufen wird, deshalb verwende ich die Options-API (gibt es eine andere Möglichkeit?)

Der Code, den ich habe, ist der folgende (zuerst Widget-functionen, dann meine Ajax-Handling-function):

public function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance = array(); $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : ''; $instance['api_key'] = ( ! empty ($new_instance['api_key']) ) ? strip_tags ($new_instance['api_key']) : ''; $instance['forum_key'] = ( ! empty ($new_instance['forum_key']) ) ? strip_tags ($new_instance['forum_key']) : ''; $instance['limit'] = ( ! empty ($new_instance['limit']) ) ? strip_tags ($new_instance['limit']) : ''; return $instance; } // end widget public function form( $instance ) { $instance = wp_parse_args( (array) $instance ); $title = ( isset ($instance['title'] ) ) ? esc_attr($instance['title']) : __( 'New title', 'eedee-dq-widget' ); $api_key = ( isset ($instance['api_key'] ) ) ? esc_attr($instance['api_key']) : ''; $forum_key = ( isset ( $instance ['forum_key'] ) ) ? esc_attr($instance['forum_key']) : '' ; $limit = ( isset ( $instance ['limit'] ) ) ? esc_attr($instance['limit']) : 5 ; // Display the admin form include( plugin_dir_path(__FILE__) . '/views/admin.php' ); } // end form public function handle_ajax_post() { check_ajax_referer( 'my_nonce', 'security' ); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $error = false; if ($error == false) { $options = get_option('widget_my_comment_widget'); ... 

alles funktioniert (Form Werte speichern, AJAX Aufruf PHP-function), das einzige Problem ist, dass die Linie

 $options = get_option('widget_my_comment_widget'); 

gibt ein Array wie folgt zurück

 $options = array[3] $options[3] = array[4] $options[3]['title'] = (string) discussion $options[3]['api_key'] = (string) xxx $options[3]['forum_key'] = (string) zzz $options[3]['limit'] = (string) 5 $options[4] = array[4] $options[4]['title'] = (string) New title $options[4]['api_key'] = (string) xxx $options[4]['forum_key'] = (string) yyy $options[4]['limit'] = (string) 5 $options['_multiwidget'] = (int) 1 

Es gibt also mehrere Widget-Konfigurationen zurück (warum? Ich habe nur eine Instanz des Widgets in meiner Sidebar, weil ich es in mehreren Themes habe?). Wie kann ich sicherstellen, dass entweder die korrekte ID der gewünschten Optionen abgerufen wird oder sichergestellt wird, dass nur ein Satz von Optionen ohne ID-Schlüssel vorhanden ist?

Bearbeiten Nach dem Deaktivieren des Plugins, dem Entfernen des DB-Eintrags, der erneuten Aktivierung und dem erneuten Hinzufügen des Widgets sehen die $ -Optionen wie folgt aus:

 $options = array[2] $options[2] = array[4] $options[2]['title'] = (string) discourse $options[2]['api_key'] = (string) xxx $options[2]['forum_key'] = (string) highcut $options[2]['limit'] = (string) 5 $options['_multiwidget'] = (int) 1 

Also noch immer gibt es diesen Index, den ich gegoogelt habe und festgestellt habe, dass er mit der _multiwidget-Einstellung zusammenhängt, aber warum ist er da?

Edit 2 Mein Konstruktor ist

 parent::__construct( 'my_comment_widget', __( 'my Comment Widget', 'eedee-my-widget' ), array( 'description' => __( 'Displays recent and popular comments ', 'eedee-my-widget' ), ) ); 

also verwende ich keine Namespaces (oder bin ich unwillig?) wie in diesem Teil der offiziellen Dokumentation erwähnt, fand ich Googling Multi-Widget.

Solutions Collecting From Web of "Mehrere Einträge in get_option Ergebnissen? oder warum ist _multiwidget auf 1 gesetzt?"

Ich habe die Antwort gefunden.

Multiwidget ist eine nette neue function innerhalb der neuen Widget-API von wordpress. Es gibt jedoch eine spärliche Dokumentation darüber, wie man es benutzt.

 $options = get_option( 'your_option_id' ); if( isset($options) && isset($options[$this->number])) { //$this->number returns the unique widget id that corresponds to the database index $instance_options = $options[$this->number]; } //now use $instance_options['setting']