php - 使用 ajax 保存 wordpress 设置 api 选项,

标签 php ajax wordpress

我已经为这个问题苦苦挣扎了一段时间。 我有一个主题选项页面,并注册了一个选项。

每次用户按下保存按钮时,我一直在尝试通过 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。我不确定我在这里缺少什么,我尝试了一些变化但似乎没有任何效果。

最佳答案

找到了一种在使用 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();

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

注意:我只注意到一个特点。在完成 POST 请求并显示成功警报后,该页面会发出一个 GET 请求,请求您的选项页面的一个页面版本,该页面版本具有参数 &settings-updated =true 添加到 url 的末尾。

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

关于php - 使用 ajax 保存 wordpress 设置 api 选项,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873537/

相关文章:

php - Paypal 电子邮件验证

php - Laravel 灯箱显示 View /表单

ajax - CORS ajax 调用自签名安全 URL

javascript - 在模态上获取重复数据后,我可以使用编辑操作删除重复数据吗?

php - Wordpress:响应式地在前端静态页面上显示博客。

php - 在wordpress中将带有参数的url设置为noindex?

php - 安排 cron 作业 laravel

jquery - 没有样式的 AJAX 请求 jQuery 链接

javascript - 访问 WordPress 面板中的子菜单

php - Wordpress 列出类别,上面至少有 5 个帖子