小部件数据作为二维数组存储在选项表中。相同类型小部件的所有数据都存储在相同的选项键下。外部数组的键是一种小部件“索引”——小部件特定实例的标识符。内部数组包含单个小部件数据。像这样:
array(5) { // outer array
[3]=> // the widget instance identifier
array(3) { // widget instance data
["title"]=>
string(0) ""
["text"]=>
string(5) "first"
["filter"]=>
bool(false)
}
[4]=> // the widget instance identifier
array(3) { // widget instance data
["title"]=>
string(0) ""
["text"]=>
string(6) "second"
["filter"]=>
bool(false)
}
// and so on
}
要了解我的意思,请将以下内容放在主题标题中(或容易看到的地方):
$w=get_option(\'widget_wp_mywidget\');
var_dump($w);
然后将小部件拖到侧栏中。你应该看看
$w
阵列变大。如果删除一些小部件,您会注意到键不会重置。它们不是简单的自动递增数字索引。
这意味着要提取特定小部件的小部件数据,您需要知道小部件的实例标识符,这非常棘手,我不知道您的具体要求是什么。
你可以爬上去$w
数组查找标题之类的线索,或在站点侧栏中爬行以在特定位置查找小部件。例如,尝试:
var_dump(wp_get_sidebars_widgets());
您将注意到,该阵列中有数据
text-7
,
pages-4
. 前缀是小部件类型,后缀与上面数组中的“标识符”(键)匹配。
Edit:
经过深思熟虑和多次评论,我认为最好的答案是:
没有最佳的方法来获取小部件选项。小部件旨在在核心中构建的相当复杂的小部件API中操作并由其管理。没有简单的方法,当然也没有核心方法,可以访问该系统之外的小部件数据。要将小部件拆开并重新组合起来,必须处理大量信息。
我的感觉是,如果您认为需要在widget API之外使用widget,那么您可能使用了错误的工具。
我可以理解在小部件和其他地方使用相同数据的需要,但我建议使用小部件作为数据源是向后的。我想得越多,我就越相信更好的方法是为数据使用其他形式/接口——主题选项、插件设置页面等等——然后检索这些数据,以便在小部件内外使用。