用ajax保存wordpress设置api选项,

Ale*_*lex 6 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();
Run Code Online (Sandbox Code Playgroud)

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' );
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lex 10

在使用Settings API时找到了通过ajax保存设置的方法.

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

而不是使用ajaxurl在wordpress中进行ajax调用时通常使用的标准; 我们使用您的设置api表单的动作调用,即options.php.

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

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

 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();
Run Code Online (Sandbox Code Playgroud)

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

注意:我注意到只有一个特点.完成POST请求并显示成功警报后,页面会GET请求您的选项页面的页面版本,其中的参数已&settings-updated=true添加到URL的末尾.

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

  • 应该记住,默认情况下WordPress在非冲突模式下运行jQuery.因此,您应该将`$`更改为`jQuery` (3认同)