#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 нет, совсем нет, настройки изменения статуса нет. Однако я не знаю, к чему его прицепить