Après de nombreuses recherches, il me semble avoir trouvé que get_this_ID (); ni d'autres itérations ne fonctionneront dans une requête AJAX. Je suis certes un PHP noob, quelqu'un peut-il expliquer s'il vous plaît comment ce gars ici a réussi? Il dit qu'il "a simplement renvoyé l'identifiant dans un div caché, puis l'a renvoyé avec l'appel AJAX."
Mon code est ci-dessous.
if(wp_verify_nonce($nonce, 'checkbox') !== false) {
global $post;
$post = $wp_query->get_queried_object();
$post_ID = $post->ID;
$user_ID = get_current_user_id();
$dataArray[$post_ID] = isset($dataArray['second_checkbox']) ? true : false;
if($user_ID != NULL) {
foreach($dataArray as $key=>$value) {
$status = update_user_meta($user_ID, $key, $value);
}
//ajaxStatus('success', 'Meta fields updated.', $post_ID);
ajaxStatus('success', 'Meta fields updated.', $dataArray);
Il génère une valeur vide pour $ post_ID dans la console.
{"status":"success","message":"Meta fields updated.","data":{"":false}}
Mais dans la page single.php, le $ post_ID est trouvé et l’écho fonctionne
<?php
global $wp_query;
$post = $wp_query->get_queried_object();
$post_ID = $post->ID;
?> <div id="test"><?php echo($post_ID); ?></div>
Javascript est ici
jQuery(document).ready(function($) {
var response;
$('#checkbox').on('submit',function(e) {
e.preventDefault();
$.post( checkbox.ajaxurl, {
action : 'submit_checkboxes',
nonce : checkbox.nonce,
post : $(this).serialize()
},
function(response) {
console.log(response);
responseSuccess(response);
});
return false;
});
function responseSuccess(data) {
response = JSON.parse(data);
if(response.status === 'success') {
$('#checkbox-message').text(response.message);
} else {
$('#checkbox-message').text(response.message);
}
} });
C'est l'ajax
function ajaxStatus($status, $message, $data = NULL) {
$response = array (
'status' => $status,
'message' => $message,
'data' => $data
//'data' => $post_ID
);
$output = json_encode($response);
exit($output);
}
Il se peut que je manque quelque chose dans votre code; mais:
vous devez "déplacer" le contenu de votre test
div vers une variable JS pouvant ensuite être utilisée dans votre Ajax (ou utiliser la valeur div directement dans votre $ .post.
par exemple. var postID = $('#test').val();
puis utilisez-le pour transmettre les informations nécessaires à votre serveur
$.post( checkbox.ajaxurl, {
action : 'submit_checkboxes',
nonce : checkbox.nonce,
thispost : postID,
post : $(this).serialize()
},
function(response) {whatever... }
);
dans votre PHP, utilisez say intval($_POST['thispost'])
pour obtenir l'identifiant de la publication et utilisez-la en conséquence.
Remarque: non testé et j'ai tendance à utiliser jQuery.ajax
avec une chaîne de données de valeurs au lieu de jQuery.post