我终于找到了我的错。
“问题”在于Zend_View
和Zend_Form
您必须自己检查并保存提交的设置。但是如果你注册了一个消毒钩register_setting()
, WordPress确实不会返回任何$_POST
数组,并将立即将数据提交到数据库中定义的选项。
解决方案是删除对的调用register_setting()
彻底地我还取消了对的呼叫settings_field()
并在Zend_Form
对象
$form = new Zend_Form();
$form->setAction(\'options.php?page=\' . $this->getMenuSlug())
->setMethod(\'post\');
$wpnonce = $form->createElement(\'hidden\', \'_wp_nonce\');
$wpnonce->setValue(wp_create_nonce($this->getMenuSlug()));
方法
$this->getMenuSlug()
将返回中使用的当前生成管理页的id
add_page_menu()
.
最后一部分是在响应Zend_View
对象这是在renderView()
方法,该方法将在中作为回调调用add_menu_page()
.
public function renderView() {
try {
if($_POST[\'submit\']) {
// Check wp nonce
if(!wp_verify_nonce($_POST[\'_wp_nonce\'], $this->getMenuSlug())) {
wp_die(__(\'Nonce incorrect!\'));
} else {
if($this->_form->isValid($_POST)) {
echo \'<div id="message" class="updated fade"><p><strong>\' . __(\'Settings saved.\') . \'</strong></p></div>\';
foreach ($this->_form->getElements() as $element) {
if(in_array($element->getName(), $this->_skipElements)) {
continue;
}
Webeo_Option::getInstance()->setValue($element->getName(), $element->getValue());
}
Webeo_Option::getInstance()->commit();
} else {
echo \'<div id="message" class="error fade"><p><strong>\' . __(\'Errors occured.\') . \'</strong></p></div>\';
}
}
}
echo $this->_form->render($this->_view);
//echo $this->_view->render($this->getViewTemplate());
} catch (Zend_View_Exception $e) {
echo $e->getMessage();
}
}
The
Webeo_Option
只是一个对象存储,可以替换为
update_option()
.