【引子】
我想实现wordpress的无刷新登录,想到可以用ajax读取用户的提交的表单,然后post给wp-login.php处理,结果被wp-login.php拒绝了,报了权限错误,一开始一直在想解决权限的问题,但是总是会去修改wp-login.php(这样会破坏文件原来的结构,不是我想要的)。后面找到了admin-ajax.php。
【正文】
在wordpress上实现ajax,可以通过前端代码后/wp-admin/admin-ajax.php进行交互。
1.在php代码中的得到其地址:
<span style="font-size:18px;">$admin_url=admin_url( ‘admin-ajax.php’ )</span>
2.ajax的调用地址:http://域名/wp-admin/admin-ajax.php?action=***(get方式)
3.设计action处理函数,假设为dosome
<span style="font-size:18px;">function dosome(){
$data = array(
'info'=>'this is my test',
'success' => true,
);
header( "Content-Type: application/json" );
echo json_encode($data);
}</span>
4.挂接到系统上去
//wp_ajax_nopriv_ 是在没有登录的处理流程;wp_ajax_是登录后的处理流程
add_action( 'wp_ajax_nopriv_***', 'dosome' );
add_action( 'wp_ajax_***', 'dosome' );
5.编写前端代码:
jQuery.post(
MyAjax.ajaxurl,
{
action : 'action的名字***',
},
function( response ) {
alert( response );
}
);
【原理分析】
请看admin-ajax.php中76行到96行
$_REQUEST['action']中存储的值就是$_POST['action']或$_GET['action'],
那么如果ajax请求“http://域名/wp-admin/admin-ajax.php”时,无论通过get还是post传递一个action的值,admin-ajaxadmin-ajax都会去查找并执行对应的处理代码。