最近在制作 Typecho default-ultra 主题,为这个主题添加了一些配置项。但是在 Typecho 1.2.1 中测试时出现了复选框无法勾选保存的情况。

查阅 Typecho Issue,发现也有类似的问题:https://github.com/typecho/typecho/issues/1590

在 Typecho 最新的开发版中,此问题已修复。但是 Typecho 官方还没有发布最新的正式版,仍然使用 1.2.1 版的话需要手动修复一下复选框无法保存的问题。

定位至 /var/Widget/Themes/Config.php,大约在第 74 行左右将其修改为:

  public function config(): Form
  {
      $form = new Form($this->security->getIndex('/action/themes-edit?config'), Form::POST_METHOD);
      themeConfig($form);
      $inputs = $form->getInputs();

      if (!empty($inputs)) {
          foreach ($inputs as $key => $val) {
              // 注释以下这行代码
              // $form->getInput($key)->value($this->options->{$key});
              // 添加以下三行代码
              if (isset($this->options->{$key})) {
                  $form->getInput($key)->value($this->options->{$key});
              }
          }
      }

      $submit = new Submit(null, null, _t('保存设置'));
      $submit->input->setAttribute('class', 'btn primary');
      $form->addItem($submit);
      return $form;
  }

修改后再次测试,问题解决。