Несколько записей в результатах get_option? или почему _multiwidget установлен в 1?

Я разрабатываю виджет WordPress и должен хранить некоторые пользовательские значения конфигурации, поэтому я использую wordpress update_option и get_option. Я новичок в разработке виджета.

У меня есть некоторые параметры конфигурации для виджета, который мне нужен для доступа из php-функции, вызываемой через ajax, поэтому я использую API-интерфейс Options (есть ли другой способ?)

Код, который у меня есть, следующий (во-первых, функции виджета, затем моя функция обработки ajax):

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'); ... 

все работает (сохранение значений формы, функция php-функции ajax), единственная проблема заключается в том, что строка

 $options = get_option('widget_my_comment_widget'); 

возвращает массив таким образом

 $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 

поэтому он возвращает несколько конфигураций виджетов (почему? У меня есть только один экземпляр виджета в моей боковой панели, потому что у меня это в нескольких темах?). Как я могу убедиться, что вы либо получите правильный идентификатор параметров, которые я хочу, либо убедитесь, что есть только один набор параметров без ключа id?

Редактировать После отключения плагина, удалив запись db, снова включив добавление виджета, параметры $ options выглядят так:

 $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 

поэтому все еще есть этот индекс, я googled и нашел, что он связан с настройкой _multiwidget, но почему он там?

Изменить 2 Мой конструктор

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

так что я не использую пространства имен (или я нехотя?), как указано в этой части официальной документации, я нашел многопользовательский мужик.

Solutions Collecting From Web of "Несколько записей в результатах get_option? или почему _multiwidget установлен в 1?"

Я нашел ответ.

Multiwidget – прекрасная новая функция в новом API-интерфейсе widget WordPress. Однако есть редкая документация о том, как ее использовать.

 $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']