Je travaille sur une requête ajax, j'ai plusieurs requêtes ajax sur mon functions.php. Et tous travaillent, mais ceci:
Sur mon php j'ai ceci:
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();
}
Sur le footer.php j'ai ceci:
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);
}
});
}
}
);
Mais je ne sais pas pourquoi cela ne fonctionne pas, la réponse à la demande est "Aucune affaire de malheur". Quelqu'un peut-il m'aider à découvrir ce qui ne va pas?
Je ne sais pas je viens de soumettre le billet sur la piste. J'utilisais get_current_user_id()
et cela modifie le comportement de wp_create_nonce.
Sinces wp_create_nonce
utilise wp_get_current_user()
Je pense qu’il ya un problème.
Lors de la transmission de données avec ajax, je préfère utiliser check_ajax_referer au lieu de wp_verify_nonce.
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();
}
Je crois que votre méthode ne fonctionne pas parce que vous utilisez $ _REQUEST au lieu de $ _POST.
function get_fb_points(){
$nonce = $_POST['nonce'];
if ( !wp_verify_nonce( $nonce, 'fb_points_nonce')) {
exit('No naughty business');
}
echo 'yeah';
die();
}