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的末尾.
我不知道这是否值得担心,我没有遇到任何问题,但从长远来看可能需要考虑.