たくさんの検索の結果、get_this_ID()が見つかりました。それ以外の繰り返しはAJAXリクエストでは機能しません。私は確かにPHP noobです、誰かがどうやって ここでこの男 を達成したか説明できますか?彼は、「単にidを隠しdivにエコーし、それからそれをAJAX呼び出しで返しました。」と言っています。
私のコードは以下の通りです。
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);
コンソールの$ post_IDに空白の値を生成します。
{"status":"success","message":"Meta fields updated.","data":{"":false}}
しかしsingle.phpページでは、$ post_IDが見つかり、エコーが機能します。
<?php
global $wp_query;
$post = $wp_query->get_queried_object();
$post_ID = $post->ID;
?> <div id="test"><?php echo($post_ID); ?></div>
Javascriptはこちら
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);
}
} });
これがajaxです
function ajaxStatus($status, $message, $data = NULL) {
$response = array (
'status' => $status,
'message' => $message,
'data' => $data
//'data' => $post_ID
);
$output = json_encode($response);
exit($output);
}
私はあなたのコードに何かが足りないかもしれません。しかし:
test
divの内容をJS変数に「移動」して、それをAjaxで使用できるようにする(または$ .postで直接div値を使用する)必要があります。
例えばvar postID = $('#test').val();
それからそれを使ってあなたのサーバーに必要な情報を渡します。
$.post( checkbox.ajaxurl, {
action : 'submit_checkboxes',
nonce : checkbox.nonce,
thispost : postID,
post : $(this).serialize()
},
function(response) {whatever... }
);
PHPの中で、投稿IDを取得し、それに応じて使用するには、intval($_POST['thispost'])
を使用します。
注:テストされていません。私はjQuery.ajax
の代わりにjQuery.post
を値のデータ文字列と共に使用する傾向があります