web-dev-qa-db-ja.com

テーマのSingle.phpからカスタムPluginにPost_ID変数を渡す方法 AJAX

たくさんの検索の結果、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);

}
1
DonChi

私はあなたのコードに何かが足りないかもしれません。しかし:

  1. test divの内容をJS変数に「移動」して、それをAjaxで使用できるようにする(または$ .postで直接div値を使用する)必要があります。

    例えばvar postID = $('#test').val();

  2. それからそれを使ってあなたのサーバーに必要な情報を渡します。

    $.post( checkbox.ajaxurl, {
       action : 'submit_checkboxes',
       nonce : checkbox.nonce,
       thispost : postID,
       post : $(this).serialize()
      },
      function(response) {whatever... }
    );
    
  3. PHPの中で、投稿IDを取得し、それに応じて使用するには、intval($_POST['thispost'])を使用します。

注:テストされていません。私はjQuery.ajaxの代わりにjQuery.postを値のデータ文字列と共に使用する傾向があります

1
scytale