Warum speichert WordPress Widget-Optionen in einem mehrdimensionalen Array?

Ich habe ein Widget mit 6 verschiedenen Optionen. Wenn ich get_option , gibt es mir ein mehrdimensionales Array mit allen meinen Optionen innerhalb des inneren Arrays, so:

 $options = get_option('widget_widgetname'); var_dump($options); 

Und die Ausgabe für var_dump ist:

 array(2) { [2]=> array(5) { ["string"]=> string(6) "Search" ["title"]=> string(12) "WDSearchForm" ["show_wrapper"]=> string(0) "" ["animate"]=> string(0) "" ["animateWidth"]=> string(2) "80" } ["_multiwidget"]=> int(1) } 

Um die Optionen zu verwenden, müsste ich also $options[2]["optionName"] statt der gewünschten $options["optionName"] . Warum macht WordPress das? Wird es immer unter “2” sein? Gibt es eine bessere Möglichkeit, diese Optionen abzurufen?

Solutions Collecting From Web of "Warum speichert WordPress Widget-Optionen in einem mehrdimensionalen Array?"

Widgets können mehrfach verwendet werden. Ihre Optionen werden direkt und automatisch als Teil der $ instance-Variablen an das Widget übergeben. Sie sollten die Optionen nicht direkt mit get_option aufrufen.

Die Deklaration der widget () -function in einer abgeleiteten class WP_Widget sieht folgendermaßen aus:

function widget( $args, $instance )

Die $instance Variable wird Ihre Optionen ohne die [2] sein. Jede Instanz des Widgets erhält seine eigenen Optionen.

Ähnlich sieht die function form () zum Anzeigen des Formulars für das Widget folgendermaßen aus:

function form( $instance )

Gleicher Deal. Schließlich erhält die function update () zwei Kopien der instanziierten Daten, so:

function update( $new_instance, $old_instance )

Die Update-function sollte die Optionen in $new_instance und die Optionen von $old_instance wenn sie ungültig sind. Die function sollte dann das resultierende kombinierte Array der gültigen Optionen zurückgeben. Dies wird dann zum neuen Satz der instanzierten Optionen, die an anderer Stelle verwendet werden können.

Sehen Sie sich die Widgets im core an, zum Beispiel WP_Text_Widget .

TL; DR: WordPress behandelt die database für Widgets automatisch. Rufen Sie get_option nicht auf, lassen Sie die zugrunde liegende WP_Widget class die Grunt-Arbeit WP_Widget .