解决了的。埃曼说的是对的。问题在于WordPress中小部件系统的配置。对于每个多实例小部件(如文本),信息以不同的选项名称存储,其中每个小部件的值以序列化方式存储。
诀窍在于如何存储序列化文本小部件的信息,这些信息有时具有特殊字符。我们必须使用heredoc。使用heredoc是为了避免字符串必须包含[\']和[“],因为两者不能同时在一行上使用。
$serialize_sidebar_widgets = <<< EOD
a:7:{s:19:"wp_inactive_widgets";a:0:{}s:9:"sidebar-1";a:1:{i:0;s:6:"text-3";}s:9:"sidebar-2";a:0:{}s:9:"sidebar-3";a:0:{}s:9:"sidebar-4";a:0:{}s:9:"sidebar-5";a:0:{}s:13:"array_version";i:3;}
EOD;
$serialize_widgets_text = <<< EOD
a:3:{i:2;a:0:{}i:3;a:3:{s:5:"title";s:5:"hello";s:4:"text";s:21:"saya hellokankamu yah";s:6:"filter";b:0;}s:12:"_multiwidget";i:1;}
EOD;
现在我们可以将它们存储在数据库中:
$wpdb->update( $wpdb->options, array( \'option_value\' => $serialize_sidebar_widgets ), array( \'option_name\' => \'sidebars_widgets\' ) );
$wpdb->update( $wpdb->options, array( \'option_value\' => $serialize_widgets_text ), array( \'option_name\' => \'widget_text\' ) );
PS:如果我们存储多实例小部件,那么我们应该记住这些小部件有自己的配置。例如,文本小部件存储在“widget\\u text”中
附言:Read how to use heredoc in PHP.