Измените статус заказа с помощью AJAX в плагине wordpress

#javascript #php #jquery #ajax #wordpress

Вопрос:

Я настраиваю плагин, который выдает последние заказы и воспроизводит звуковое уведомление. Однако я хочу добавить вызов ajax к пользовательской кнопке, которая отображается в каждой строке:

До сих пор это мой метод:

 // ajax function in plugin file  lt;?php  function my_action_javascript($order_id) {  $order = wc_get_order( $order_id ); // returns correct order id in every button  ?gt;  lt;script type="text/javascript"gt; // initiate script  jQuery(function($){    $('pluginchangebutton').click( function(e){  e.preventdefault();    $.ajax({  type: 'POST',  dataType: 'json',  url: "lt;?php echo admin_url('admin-ajax.php'); ?gt;",  data: {  'action': 'my_action', // send php function ?   'order_id': lt;?php echo $order_id; ?gt;, // Here we send the order Id  },   success: function(response) { // no response at all  alert('ok');  },  error: function(response) { // no response at all  alert('error');  }  });  });  });  lt;/scriptgt; lt;?php  }   add_action( 'wp_ajax_my_action', 'my_action' );// register my_action to wp ajax  function my_action() {  if ( isset($_POST['order_id']) amp;amp; $_POST['order_id'] gt; 0 ) {   $order = wc_get_order($_POST['order_id']);   $order-gt;update_status('completed'); // function to update status  die();  }  }  // ajax end  

Это функция ajax, которую я помещаю поверх файла плагина.

И вот как я отображаю свою таблицу:

 // get recent orders  $recent_orders = wc_get_orders(array(  'limit' =gt; $show_order_num,  'orderby' =gt; 'date',  'order' =gt; 'DESC',  'status' =gt; $show_order_statuses,  ));   $content = "lt;h1gt;Нови порачкиlt;/h1gt;";  $content .= "lt;table id='customers-new-order-notification'gt;";  $content .= "lt;trgt;lt;thgt;Последни порачкиlt;/thgt;lt;/trgt;";  $content .= "lt;trgt;lt;thgt;Порачка бр.lt;/thgt;lt;thgt;Дата на порачкаlt;/thgt;lt;thgt;Статус на порачкаlt;/thgt;lt;thgt;Детали за порачкаlt;/thgt;lt;/trgt;";     foreach ($recent_orders as $recent_order) {  // get order details .. ... .. .. .. .. ..  $order_id = $recent_order-gt;get_id();  $_order = wc_get_order($order_id);  $order_date = $_order-gt;get_date_created();  $order_status = $recent_order-gt;get_status();  $order_link = get_site_url();  $order_link .= "/wp-admin/post.php?post=";  $order_link .= $order_id;  $order_link .= "amp;action=edit";  $billing_first_name_plugin = $recent_order-gt;get_billing_first_name();  $billing_address_1_plugin = $recent_order-gt;get_billing_address_1();  $billing_city_plugin = $recent_order-gt;get_billing_city();  $billing_postalcode_plugin = $recent_order-gt;get_billing_postcode();  $billing_email_plugin = $recent_order-gt;get_billing_email();  $billing_phone_plugin = $recent_order-gt;get_billing_phone();  $billing_country_plugin = $recent_order-gt;get_billing_country();  $order_shipping_method_plugin = $recent_order-gt;get_shipping_method() . ' - ' . $recent_order-gt;get_shipping_total() . ' rsd';  $order_get_subtotal_plugin = $recent_order-gt;get_subtotal() . ' rsd';  $order_get_total_plugin = $recent_order-gt;get_total() . ' rsd';  $order_javena='Непотврдена';  $customer_note_plugin = $recent_order-gt;get_customer_note();  $statusPrefix = "wc-";  $_orderStatus = $statusPrefix . $order_status;  $_order_status = $order_status_map[$_orderStatus];    $date_format = get_option('date_format'); // format   $time_format = get_option('time_format'); // format    $format_order_date = $time_format . " - " . $date_format;  $items = $recent_order-gt;get_items(); // get product items from order     // add content to $content .. table .. .. . .. row 1   // .... .... ... ... ... ... ... ... row 2   // row 3 start  $content .= "lt;tdgt;" . esc_html($order_javena) ."lt;brgt;";  $content .= my_action_javascript($_order) . "lt;button class=pluginchangebutton type=submitgt;Потврдиlt;/buttongt;";  $content .="lt;/tdgt;"; // row 3 end  // row 4 add .. .. ..   // row 4 end  if (!$isNew) {  delete_option('_new_order_id_for_notification');  $time = $refreshTime;  header("Refresh:" . esc_html($time) . "");  add_action('wp_head', 'wpb_hook_javascript');    }  echo $content; }  

При проверке $.ajax получает правильный идентификатор заказа для каждой кнопки, однако я вообще не получаю ответа. Я пробовал с консолью.войдите также, но по-прежнему никакого ответа. Я попытался вставить тип, тип данных и URL-адрес с помощью ‘ ‘, а также » «, но все равно ничего. Этот код находится в файле плагина. Я попытался добавить его в functions.php, это не работает. Могу я получить некоторые рекомендации?

Комментарии:

1. Можете ли вы сказать мне, где вы размещаете эту функцию customer_completes_order_thankyou? Видите ли вы код JS и HTML-код, написанные в этой функции на странице?

2. @Vantiya Да, поэтому я попытался поместить его в начало файла. ( в каталоге плагинов ) HTML — код показывает кнопки, а код js дает правильный идентификатор заказа.

3. ОК. Пожалуйста, также убедитесь, что AJAX также вызывается правильно. Ваш код выглядит как правильный.

4. Есть ли у вас какие-либо другие настройки, например, при изменении статуса, вы настраиваете шаблон электронной почты? Есть ли какая-либо ошибка в этом коде?

5. @Vantiya нет, совсем нет, настройки изменения статуса нет. Однако я не знаю, к чему его прицепить