2017-02-01 16 views
0

私はWordPressのサイトでAjax POSTを実行しようとしています。これはチェックボックスがオンになっているかどうかをチェックし、その値をクリックするとデータベース上で更新されるようにします。通常のPHPフォームの送信を使用するのが最も簡単ですが、私が得ようとしているフィールドはフォーム外です。ファイルの処理POSTデータが渡されない

ボタンをクリックした後、必要なデータが取得されている場合にアラートを作成しました。そのデータがあれば、Ajax POSTを続行できます。ただし、2番目のファイルにアラートを挿入すると、POSTデータが表示されません。

ここに私のコード(コンテンツ-orders.php)です:test.phpを

<div class="container"> 
         <div class="row"> 
          <div class="col-sm-6 text-left"> 
           <form class="form-inline" method="post"> 
              <select id="bulk_action_stat" name="bulk_action_stat"> 
               <option value="BA">Bulk Actions</option> 
               <option value="MTT">Move To Trash</option> 
               <option value="MP">Mark Processing</option> 
               <option value="MOH">Mark On-Hold</option> 
               <option value="MC">Mark Complete</option> 
              </select> 
              <button class="btn btn-success" type="submit" id="check-all">Filter</button> 
           </form> 
          </div> 
          <div class="col-sm-6 text-right"> 
           <form class="form-inline" method="get"> 
            <?php $statuses = wc_get_order_statuses(); ?> 
             <select name="orderstatus" class="custom-select mb-2 mr-sm-2 mb-sm-0"> 
              <option value="any">-- Select Status --</option> 
              <?php foreach($statuses as $skey => $status) : ?> 
               <option <?php echo ((isset($_GET['orderstatus']) && $_GET['orderstatus'] == $skey) ? 'selected="selected"' : '')?> value="<?php echo $skey;?>"><?php echo $status;?></option> 
              <?php endforeach; ?> 
             </select> 
             <input type="submit" value="Filter" /> 
           </form> 
          </div> 
         </div> 
         <?php 
          $status_query = 'any'; 
          if(isset($_GET['orderstatus'])) { 
           $status_query = $_GET['orderstatus']; 
          } 

          $filters = array(
           'post_status' => $status_query, 
           'post_type' => 'shop_order', 
           'posts_per_page' => 200, 
           'paged' => 1, 
           'orderby' =>'modified', 
           'order' => 'DESC' 
          ); 

          $loop = new WP_Query($filters); 
         ?> 

         <div class="row"> 
          <div class="table-responsive"> 
           <table class="table responstable table-striped"> 
            <thead> 
             <tr> 
              <th><input id="checkAll" type="checkbox"></th> 
              <th>Order</th> 
              <th>Purchased</th> 
              <th>SKU</th> 
              <th>Ship To</th> 
              <th>Date</th> 
              <th>Total</th> 
              <th>Status</th> 
              <th>Actions</th> 
             </tr> 
            </thead> 
            <tbody> 
             <?php 
             if(!($loop->have_posts())) { 
             ?> 
             <tr> 
              <td colspan="8" class="text-center">No data.</td> 
             </tr> 
             <?php 
             } else { 
              while ($loop->have_posts()) { 
              $loop->the_post(); 
              $order = new WC_Order($loop->post->ID); 
             ?> 
             <tr> 
              <td><input id="select-item" name="bulk_actions_check" type="checkbox" value="<?php echo $loop->post->ID; ?>"></td> 
              <td><?php echo $order->billing_first_name." ".$order->billing_last_name; ?></td> 
              <td> 
              <?php 
               foreach ($order->get_items() as $key => $lineItem) { 
                echo $lineItem['qty']." ".$lineItem['name']."<br />"; 
               } 
              ?> 
              </td> 
              <td><?php 
              foreach ($order->get_items() as $key => $SKUItem) { 
                $sku_handler = new WC_Product($SKUItem['product_id']); 
                echo $sku_handler->sku."<br />"; 
              } 
              ?></td> 
              <td><?php echo $order->get_shipping_address(); ?></td> 
              <td><?php explode(" ",$order->order_date); echo $order->order_date[0];?></td> 
              <td><?php echo "$".$order->get_total(); ?></td> 
              <td><?php echo $order->status; ?></td> 
              <td> 
               <form class="form-inline" method="get"> 
                <input type="hidden" name="status_id" value="<?php echo $order->id; ?>" /> 
                <?php if ($order->status != 'cancelled' && $order->status != 'completed') { ?> 
                <?php if ($order->status != 'processing') { ?> 
                 <button class="btn btn-primary" id="processing-<?php echo $order->id; ?>" type="submit" name="update_status" value="processing"><i class="fa fa-ellipsis-h" aria-hidden="true"></i></button> 
                <?php }?> 
                <button class="btn btn-success" id="complete-<?php echo $order->id; ?>" type="submit" name="update_status" value="completed"><i class="fa fa-check" aria-hidden="true"></i></button> 
                <?php }?> 
                <button class="btn btn-info" id="view-<?php echo $order->id; ?>" type="submit" name="update_status" value="view"><i class="fa fa-eye" aria-hidden="true"></i></button> 
               </form> 
              </td> 
             </tr> 
             <?php 
              } 
             } 
             ?> 
            </tbody> 
           </table> 
          </div> 
         </div> 
        </div> 
<script type="text/javascript"> 
jQuery(document).ready(function(){ 
     jQuery("#checkAll").click(function() { 
      jQuery('input:checkbox').not(this).prop('checked', this.checked); 
     }); 
     jQuery('#check-all').click(function(){ 
      var bulk_action_status = jQuery('#bulk_action_stat').val(); 
     var checkValues = jQuery('input[name=bulk_actions_check]:checked').map(function() 
     { 
      return jQuery(this).val(); 
     }).get(); 
     alert(checkValues); 
     jQuery.ajax({ 
      url: '<?php echo get_stylesheet_directory_uri(); ?>/test.php', 
      type: 'post', 
      data: { ids: checkValues }, 
      success:function(data){ 
      } 
     }); 
    }); 
}); 

は、これらの2つのファイルは、私の子供であるだけ

print_r($_POST);

ですテーマ。

誰かが助けてくれることを願っています。ありがとう!

-Eli enter image description here

+0

ajaxの使用方法は、ワードプレスhttps://codex.wordpress.org/AJAX_in_Pluginsでご確認ください。とにかくあなたがおそらく404エラーを取得するWordPressの方法ではないajaxの呼び出しを行っている場合。 chrome devであなたのネットワークをチェックして、あなたのajaxを呼び出すときに404エラーを返すかどうかを確認してください。 – Shibi

+0

あなたの返信ありがとう!それを機能させる別の方法はありますか?私は時間がなくなり、私はまだあなたが提案したものに精通していません。 –

+0

test.phpファイルの先頭にある<?phpヘッダ( "HTTP/1.1 200 OK")に追加することができます。 ?> ' – Shibi

答えて

0

私はbellendです。

フォームにはIDだけがあり、フォームIDをフォーム外のすべてのフィールドに追加する必要があります。

<form id="bulk_action_filter" class="form-inline" method="post"> 
     <select id="bulk_action_stat" name="bulk_action_stat"> 
     <option value="">Bulk Actions</option> 
     <option value="trash">Move To Trash</option> 
     <option value="processing">Mark Processing</option> 
     <option value="on-hold">Mark On-Hold</option> 
     <option value="completed">Mark Complete</option> 
     </select> 
     <input form="bulk_action_filter" type="submit" name="filter_bulk_actions" id="check-all" value="Apply"/> 
</form> 
<input form="bulk_action_filter" id="select-item" name="bulk_actions_check[]" type="checkbox" value="<?php echo $loop->post->ID; ?>"> 
関連する問題