私はAjaxリクエストに取り組んでいます、私は私のfunctions.phpにいくつかのAjaxリクエストがあります。そして、すべてがうまくいっていますが、これは:
私のPHPでは、私はこれを持っています:
add_action("wp_ajax_fb_points", "get_fb_points");
add_action("wp_ajax_nopriv_fb_points", "get_fb_points");
function get_fb_points(){
if ( !wp_verify_nonce($_REQUEST['nonce'], 'fb_points_nonce')) {
exit('No naughty business');
}
echo 'yeah';
die();
}
Footer.phpに私はこれを持っています:
FB.Event.subscribe('Edge.create',
function(response) {
if(response == '<?php echo get_facebook_profile('link'); ?>') {
$.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: { action: 'fb_points', challenge : 2, nonce : '<?php echo wp_create_nonce('fb_points_nonce'); ?>' },
async: false,
success: function(data){
console.log(data);
}
});
}
}
);
しかし、なぜそれがうまく機能していないのか私にはわかりませんが、リクエストの応答が「ノービジネス」ではありません。誰が私が何が悪いのかを見つけるのを手伝ってくれる?
チケットをトラックに提出しただけではわかりません。私はget_current_user_id()
を使っていました、そしてそれはwp_create_nonceの振る舞いを変更します。
Sinces wp_create_nonce
はwp_get_current_user()
を使っています私は問題があると思います。
Ajaxを使ってデータを渡すときは、wp_verify_nonceの代わりに check_ajax_referer を使うのが好きです。
B.Event.subscribe('Edge.create',
function(response) {
if(response == '<?php echo get_facebook_profile('link'); ?>') {
$.ajax({
url: '<?php echo admin_url('admin-ajax.php'); ?>',
data: { action: 'fb_points', challenge : 2, _ajax_nonce : '<?php echo wp_create_nonce('fb_points_nonce'); ?>' },
async: false,
success: function(data){
console.log(data);
}
});
}
}
);
function get_fb_points(){
check_ajax_referer( 'fb_points_nonce');
echo 'yeah';
die();
}
あなたは$ _POSTの代わりに$ _REQUESTを使っているので、あなたの方法はうまくいかないと思います。
function get_fb_points(){
$nonce = $_POST['nonce'];
if ( !wp_verify_nonce( $nonce, 'fb_points_nonce')) {
exit('No naughty business');
}
echo 'yeah';
die();
}