The problem: 使用函数中的自定义函数更改小部件的选项。php,当没有有用的挂钩,并且同一个小部件(multiwidget)多次出现时。
这将涉及:
从“wp\\u options”表中的“widget\\u some-widget”检索选项。(返回的选项包含一组设置(以序列化形式),对应于同一小部件的多个唯一事件重复多次。)
更改选项实例的值,例如,调用some_name
, 从“旧价值”到“新价值”,另一个叫做some_other_name
, 从“一些旧价值”到“一些新价值”。(可能是小部件的每次出现在序列化选项字符串中都有自己的id,可以通过某种方式识别?)
使用更改的选项更新数据库
即沿着这些线的东西-
function change_widget_configuration() {
$options = get_option(\'widget_some-widget\');
// [code to parse $options string to ensure the correct occurrences of \'some_name\' and \'some_other_name\' have their values changed]
/* third-occurrence of */ $options[\'some_name\'] = \'new value\';
/* third-occurrence of */ $options[\'some_other_name\'] = \'new value\';
update_option(\'widget_some-widget\', $options);
}
小部件的序列化选项字符串可能如下所示(省略号除外)-
i:3;a:20:{s:5:"title";s:8:"My Title";s:9:"some_name";s:11:"Bit of text";s:15:"some_other_name";s:2:"17";
[…]s:14:"more_from_this";s:29:"More articles on this subject";}s:12:"_multiwidget";i:1;}
可以采取什么样的方法(使用上面注释掉的代码)来解决这个问题*
*这对于控制第三方小部件(没有任何有用的挂钩)的输出非常有用,而无需更改其代码,或在函数中重复大块代码。php
SO网友:maduroblanco
经过一些挖掘,我找到了一个解决方案(在评论中解释)-
function change_widget_configuration() {
$options = get_option(\'widget_some-widget\'); // retrieve the options for all occurrences of the named widget*
$widget_number = 3; // the id number of the specific occurrence of the widget whose options you wish to alter (this can be obtained simply in the html from the <div id=""> tag of the specific widget)
$sub_options = $options[$widget_number]; // this now contains the options of the specific occurrence of the widget**
$sub_options[\'some_name\'] = \'new value\'; // change any named option*
$sub_options[\'some_other_name\'] = \'new value\';
$options[$widget_number] = $sub_options // pass the changes back to the multi-widget array
update_option(\'widget_some-widget\', $options); // write the altered widget options back into the wp_options table*
}
*在获取或更新数组之前,添加适当的条件语句以检查选项是否存在。
**这是多窗口小部件的特殊解决方案。
就是这样!这个简单的小函数现在允许我们控制各种小部件的输出,只需通过编程方式更改它们的选项,而不是手动或黑客攻击代码。例如,我现在在博客的Frontpage上有一个第三方小部件,它通常显示admin中设置的固定类别中的帖子列表,但现在它的类别(及其标题)会根据函数中放置的自定义函数定期更改。php。可能的应用程序是无穷无尽的,它解决了与缺少有用挂钩的插件交互的许多问题,所有这些都不需要入侵插件的代码。在混音中添加自定义字段,我们就可以飞行了。。。