为什么WordPress将小部件选项存储在多维数组中?

时间:2013-01-14 作者:Yoav Kadosh

我有一个有6个不同选项的小部件。当我使用get_option, 它给了我一个多维数组,所有选项都在内部数组中,如下所示:

$options = get_option(\'widget_widgetname\');
var_dump($options);
和的输出var_dump 是:

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) }
因此,为了使用这些选项,我必须$options[2]["optionName"] 而不是想要的$options["optionName"].Wordpress为什么这样做?它总是在“2”以下吗?有没有更好的方法来检索这些选项?

1 个回复
最合适的回答,由SO网友:Otto 整理而成

小部件可以多次使用。您的选项将作为$instance变量的一部分直接自动传递给小部件。您不应该使用get\\u选项直接获取选项。

WP\\u widget派生类中的widget()函数声明如下所示:

function widget( $args, $instance )

这个$instance 变量将是您的选项,不带[2]。小部件的每个实例都有自己的选项。

类似地,用于显示小部件表单的form()函数如下所示:

function form( $instance )

同样的交易。最后,update()函数获取实例化数据的两个副本,如下所示:

function update( $new_instance, $old_instance )

更新功能应验证中的选项$new_instance, 并使用$old_instance 如果无效。然后,函数应返回有效选项的结果组合数组。然后,这将成为新的实例化选项集,供其他地方使用。

查看核心中的小部件,例如WP_Text_Widget, 例如。

TL;DR:WordPress自动处理小部件的数据库内容。不要调用get\\u选项,让底层WP_Widget 全班做繁重的工作。

结束