几个月前,沉寂了多年的typecho终于又更新版本了,先是更新到了1.20,然后没多久又更新到了1.2.1。

当时发现更新后立马就把博客给更新了,结果使用过程中发现配置的复选框一直无法保存。最后查看了github的issue,才找到了问题原因。

在typecho/var/Widget/Themes/Config.php的第74行:

$form->getInput($key)->value($this->options->{$key}); 

这行代码中,从options中拿值,但是因为测试复选框新加入的,options中并没有对应的值,导致给了一个空的值给测试复选框 $this->getInput('testBlock')

当主题选项保存的时候,is_array 中的数据是从 $this->getInput('testBlock') 拿 value,但前面程序已经设置为空值,所以在收集提交选项数据时候,以下代码判断不通过,返回 null ,最终导致保存勾选无效.

解决方案

修改上面的代码为:

if (isset($this->options->{$key})) {
    $form->getInput($key)->value($this->options->{$key});
}

参考

主题启用后,添加复选框选项无效

fix: adding checkbox options after theme initialization cannot be saved.

最后修改:2024 年 03 月 09 日
如果觉得我的文章对你有用,请随意赞赏