在选项页面提交后,提交的$_POST数组存储在哪里?

时间:2011-07-08 作者:Roman

当我点击Save Changes 在选项页上,该选项页由创建add_menu_page()? 在数据库传输之前,提交的数据存储在哪里?

A.print_r($_REQUEST) 只返回两个$_GET 参数pagesettings-updated.

我已经查过手册了add_settings_field 只有以下提示:

。。。保存将在幕后进行。

我想优化我创建插件设置页面的过程。我已经跳上了WP Settings API 具有add_settings_sectionadd_settings_field 很久以前,但每次都创建一个新的回调函数会让人感觉有点不舒服。因此,我不想在回调中创建特定的字段/节代码,而是想使用Zend_View. 所有输入字段都将使用Zend_Form 并附加到视图。最后,回调add_menu_page() 将返回渲染视图对象,而不是正常的HTML输出。

HTML存储在视图模板中,位于views/pages/admin/ (例如。default.phtml).

基本原则已经起作用了,我对结果很满意。由于使用Zend_View, 我得自己攒钱。但是WordPress似乎删除了提交的$\\u POST数组。如果在成功提交表单后调试输出,则只有$_GET 已设置上述参数。

我还附加了函数的输出settings_fields() 到视图,该视图生成所需的隐藏字段(option_page, action, _wp_nonce).

有什么想法吗?

2 个回复
最合适的回答,由SO网友:Roman 整理而成

我终于找到了我的错。

“问题”在于Zend_ViewZend_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() 将返回中使用的当前生成管理页的idadd_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();
    }
}
TheWebeo_Option 只是一个对象存储,可以替换为update_option().

SO网友:Chip Bennett

您只需要一个回调函数,如调用register_setting() (Codex ref.):

register_setting( $option_group, $option_name, $sanitize_callback );
因此,所有选项都包含在一个数组中,一个数据库条目中,$option_name.

然后,回调函数被传递给$input 变量,该变量保存所有表单提交的数据,函数操作/清理这些数据,并返回清理后的输出:

function mytheme_sanitize_callback( $input ) {
    // sanitization functions go here
    return $sanitized_output;
}
因此:一个数据库条目,作为选项数组;和一个针对表单提交的用户数据的清理回调。

有关更多帮助,请参考this tutorial.

结束

相关推荐

Can't save options

我使用设置API创建了主题选项页面,一切正常,但我无法保存选项。我试图找出我错过了什么,但我失败了。知道是什么导致了这个问题吗?这是我的选项页面的代码<?php /** * This functions registers default options values for Evolutionary theme * settings */ function ev_theme_settings_defaults() { $options