Почему ajax не работает с некоторыми перехватчиками WordPress и вместо этого перезагружает страницу? - PullRequest
0 голосов
/ 26 марта 2019

Я создал функцию ajax, которая прекрасно работает, когда я подключаю ее к перехватчикам admin_head или admin_notices, но она не работает, когда я подключаю ее к перехватчику manage_posts_extra_tablenav, вместо вызова ajax она просто перезагружает страницу и URL-адресОткрытая страница после перезагрузки страницы имеет значение

Request URL: http://localhost/wc/wp-admin/edit.php?s=&post_status=all&post_type=product&_wpnonce=c1a10340ac&_wp_http_referer=%2Fwc%2Fwp-admin%2Fedit.php%3Fs%26post_status%3Dall%26post_type%3Dproduct%26action%3D-1%26product_cat%26product_type%26stock_status%26paged%3D1%26action2%3D-1&action=-1&product_cat=&product_type=&stock_status=&paged=1&action2=-1

, и эта верхняя ссылка выполняет перенаправление 302 на эту ссылку

http://localhost/wc/wp-admin/edit.php?s&post_status=all&post_type=product&action=-1&product_cat&product_type&stock_status&paged=1&action2=-1

Это мой код, однако оба действия связаны с одной и той же функцией, новерсия сверху работает нормально, а та, что на другом крючке, не работает, поэтому мне было интересно, в чем причина и как ее решить?

add_action( 'manage_posts_extra_tablenav', 'apm_update_all_products_ajax' );
add_action('admin_notices', 'apm_update_all_products_ajax');

function apm_update_all_products_ajax() {
  $product_ids = wc_get_products( array( 'return' => 'ids', 'limit' => -1 ) );
  ?>
    <div class="apm_bulk_update_prices_wrap alignleft actions">
  <button class="button apm_update_prices" id="update_prices" onclick="apm_update_all_products()">Update All Products</button>
    <p id="apm_bulk_status">test</p>
    </div>
          <script type="text/javascript" >
            product_ids = <?php echo json_encode($product_ids); ?>;
            product_ids_n = product_ids.length;
            product_ids_step = 0;
      function apm_update_all_products() {
                product_id = product_ids[product_ids_step];
                    $.ajax({
                        type: "POST",
                        url: ajaxurl,
                        dataType: "JSON",
                        data: {
                                action: 'apm_update_single_product',
                                postId: product_id
                        },
                        success: function(lookup_data) {
                                product_ids_step++
                                $('#bulk_status').text('Updated ' + product_ids_step + ' of ' + product_ids_n );
                                if (product_ids_step < product_ids_n) {
                                    apm_update_all_products();
                                }
                        },
                        error: function(jqXHR, textStatus, errorThrown) {

                        }
                    })
      };

    </script>
  <?php
}

, и вот скриншот, показывающий место2 хука https://snag.gy/zNXUmv.jpg

Я думаю, что проблема вызвана тем, что называется nonce, но я не совсем понимаю, что такое nonce и как это исправить.

...