用ajax保存wordpress设置api选项,

时间:2012-06-03 20:04:03

标签: php ajax wordpress options

我已经在这个问题上挣扎了很长一段时间了。 我有一个主题的选项页面,并注册了一个选项。

每次用户按下保存按钮时,我都试图通过ajax更新选项,这是我的代码。

JS:

       function save_main_options_ajax() {

        $('.main-options-form').submit( function () { 

            var b       =  $(this).serialize(),
                optdata =  { action : "wp_ajax_main_options_save", data: b };

            $.post( ajaxurl, b, function (response) {
                if (response == 1 ) { alert('sucess'); }
                else { alert(optdata);}
            });
            return false;               
        });
    }
save_main_options_ajax();

php:

 function main_options_save_ajax() { 

        check_ajax_referer('_wpnonce', '_wpnonce' );

        $data = $_POST;
        unset($data['option_page'], $data['action'], $data['_wpnonce'], $data['_wp_http_referer']);


        if ( update_option('main_options', $data ) )
        { die(1); }
        else { die (0); }           
}
add_action('wp_ajax_main_options_save', 'main_options_save_ajax' );

我在firebug中看到的响应是0.我不知道我在这里缺少什么,我尝试了一些变化,但似乎没有任何效果。

2 个答案:

答案 0 :(得分:9)

使用Settings API时,找到了一种通过ajax保存设置的方法。

我在代码中犯的主要错误是我使用了错误的url路径。

而不是使用标准ajaxurl,这是在wordpress中进行ajax调用时通常使用的标准options.php;我们使用您的设置api表单的动作调用,即 function save_main_options_ajax() { $('.main-options-form').submit( function () { var b = $(this).serialize(); $.post( 'options.php', b ).error( function() { alert('error'); }).success( function() { alert('success'); }); return false; }); } save_main_options_ajax();

因为我们使用这个url路径,所以不需要php函数来处理请求,因为options.php会为我们处理所有这些。

因此我们只需要处理在我的实例中看起来像这样的js函数。

POST

就是这样,保存后我得到了成功警报,我的选项被保存了。

注意:我注意到只有一个特点。完成GET请求并显示成功提醒后,该页面会针对您的选项页面的页面版本发出&settings-updated=true请求,该页面版本的参数{{1}}已添加到网址末尾。

我不知道这是否值得担心,我没有遇到任何问题,但从长远来看可能需要考虑。

答案 1 :(得分:2)

尝试将操作值从wp_ajax_main_options_save更改为main_options_save。 Wordpress会自动将wp_ajax_前缀添加到您的操作值,例如wp_ajax_{your_posted_action}

阅读5个优秀提示here,了解其他最佳做法。