Widget options get

时间:2014-03-29 作者:wordpressguest

如何获取小部件选项?

我试过这样做,就像在另一个问题“在小部件之外使用小部件选项”中看到的那样:

$w=get_option(\'widget_wp_mywidget\');
    $one=$w[2]["myval"];
    $two=$w[2]["myotherval"];
但我不太清楚为什么这[2]是动态的,我不能依赖它,那么如何以正确的方式获得数组的精确值呢?

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

小部件数据作为二维数组存储在选项表中。相同类型小部件的所有数据都存储在相同的选项键下。外部数组的键是一种小部件“索引”——小部件特定实例的标识符。内部数组包含单个小部件数据。像这样:

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,那么您可能使用了错误的工具。

我可以理解在小部件和其他地方使用相同数据的需要,但我建议使用小部件作为数据源是向后的。我想得越多,我就越相信更好的方法是为数据使用其他形式/接口——主题选项、插件设置页面等等——然后检索这些数据,以便在小部件内外使用。

SO网友:user6272238

First you need to know the name of the $widget.

在本例中,我们的小部件的类名是FooBar。

有关小部件类名,请参阅Wordpress Codex或插件文档。https://codex.wordpress.org/Function_Reference/the_widget

Next we want to get $all_instances of the widget.

小部件作为选项存储在数据库中。我们可以使用get\\u选项Wordpress函数来检索与特定小部件类关联的所有小部件数据。

Widget选项名称使用前缀“Widget”,因此,您的选项名称类似于:“Widget\\u foobar”

$all_instances = get_option(\'widget_foobar\');
让我们打印存储在该选项中的所有小部件的数组

print_r( $all_instances );

// You might get an array that looks something like this:

Array ( [2] => Array ( [title] => Foo Title [text] => Bar Text ) [3] => Array ( [title] => Bar Title [text] => Foo Text ) 

Now let\'s get the widget $instance we want

我们将打印数组中索引为[2]的第一个小部件。

$instance = $all_instances[2];

the_widget(\'FooBar\', $instance, $default_args );
省略$default\\u args以在参数前后使用主题的默认小部件“”。

结束

相关推荐

Individual Widgets per Page

在我的Wordpress网站(仅限于页面,无帖子)中,我需要在侧边栏中放置一些静态blob。我们可以将这些“blob”称为小部件。至少他们会有一个固定的html内容,如“摘要1”、“摘要2”、“免责声明”、“foo策略”。。。我需要的是,在每一页上都有不同的安排。因此,这不仅仅是“单一”对“归档”,而是真正的“产品页面A”对“产品页面B”对“关于我们”对“服务条款”。。。我在考虑自定义元框,以便在单个编辑器页面上打开和关闭它们wp-admin/post.php?post=196&action=ed