如何从自定义小部件中获取单个值?

时间:2020-09-03 作者:Daniel Bertoldi

我有以下自定义侧栏:

custom footer sidebar with menu and four text widgets

我想知道是否有可能单独获取每个小部件中存储的值。我已经尝试了以下操作:

global $wp_registered_widgets;
$widgets = wp_get_sidebars_widgets();

echo "<pre>";
var_dump($widgets[\'footer-1\']);
foreach ($widgets[\'footer-1\'] as $widget) {
  var_dump($wp_registered_widgets[$widget]); 
}
echo "</pre>";
但是第一个var_dump 仅返回:

array(5) {
  [0]=>
  string(10) "nav_menu-2"
  [1]=>
  string(6) "text-2"
  [2]=>
  string(6) "text-3"
  [3]=>
  string(6) "text-4"
  [4]=>
  string(6) "text-5"
}
以及var_dump 内部foreach 仅返回此属性:

array(7) {
  ["name"]=>
  string(4) "Menu"
  ["id"]=>
  string(10) "nav_menu-2"
  ["callback"]=>
  array(2) {
    [0]=>
    object(WP_Nav_Menu_Widget)#4570 (9) {
      ["id_base"]=>
      string(8) "nav_menu"
      ["name"]=>
      string(4) "Menu"
      ["option_name"]=>
      string(15) "widget_nav_menu"
      ["alt_option_name"]=>
      NULL
      ["widget_options"]=>
      array(3) {
        ["classname"]=>
        string(15) "widget_nav_menu"
        ["customize_selective_refresh"]=>
        bool(true)
        ["description"]=>
        string(41) "Add a menu to your widget area."
      }
      ["control_options"]=>
      array(1) {
        ["id_base"]=>
        string(8) "nav_menu"
      }
      ["number"]=>
      int(2)
      ["id"]=>
      string(10) "nav_menu-2"
      ["updated"]=>
      bool(false)
    }
    [1]=>
    string(16) "display_callback"
  }
  ["params"]=>
  array(1) {
    [0]=>
    array(1) {
      ["number"]=>
      int(2)
    }
  }
  ["classname"]=>
  string(15) "widget_nav_menu"
  ["customize_selective_refresh"]=>
  bool(true)
  ["description"]=>
  string(41) "Add a menu to your widgets area."
}
我需要什么inside 每个小部件的。所以对于文本,我需要检索存储在textarea. 这可能吗?

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

我认为你这样做很难。我会首先访问phpMyAdmin,找到您的WP数据库,找到Options表,然后使用%search\\u term%表单在option\\u name字段中搜索小部件的名称。找到它后,您将看到小部件背后的所有数据存储在一个名为option\\u value的字段/字符串中,该字段/字符串使用php的serialize函数进行序列化。只需抓取字段的内容并使用unserialize(“raw\\u field\\u contents”)(注意原始数据周围的单引号)将其取消序列化,这将生成一个包含该小部件后面所有值的单个数组。

好的,这就是手动过程。使用WP的数据库函数来检索您感兴趣的每个小部件的值,检索序列化的小部件值似乎更有效。然后,您的值将以变量的形式返回,因此解码表单将不带单引号地取消序列化($变量)。请注意,多维数组中的第一个索引是小部件的特定实例。例如,如果您在侧栏中放置了一个小部件,而在页脚区域中放置了同一个小部件,那么第一个索引号允许您区分实例。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'