Я пытаюсь изучить ajax в WordPress для удаления записи таблицы, но запутываюсь в размещении

#javascript #php #jquery #ajax #wordpress

Вопрос:

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

Я добавил кнопку в конце с именем Delete, и когда я нажимаю эту кнопку, я бы хотел, чтобы она удаляла запись из таблицы и заставляла всю запись исчезать с исчезновением.

Я просматривал веб-сайты о том, как ajax работает с WordPress, но запутался.

Это мой код кнопки и javascript на fixtures_admin.php страница в моем плагине.

 <input type="button" id="<?php echo $elementid; ?>" class="submitDeleteEntry" name="submitDeleteEntry" value="Delete" />

<script type="text/javascript">
    jQuery(document).on('click', '.submitDeleteEntry', function () {
        var id = this.id;
        //alert(id);
        jQuery.ajax({
            type: 'POST',
            url: ajaxurl,
            data: {"action": "fws_delete_row", "id": id},
            success: function (data) {
               
            }
        });
     });
</script>
 

$elementid просто использует идентификатор переменной из базы данных и работает по назначению.

Если я раскомментирую строку alert (id); Я получаю предупреждение с идентификатором.

Я разместил этот код в верхней части страницы, регистрирующей ajax

 function fws_delete_row(){
    global $wpdb;
    $dbtable = $wpdb->prefix . 'fws_fixtures';
    $id = $_POST['id'];
    $wpdb->delete($table, array('id' => $id));    
}
add_action( 'wp_ajax_fws_delete_row', 'fws_delete_row' );
add_action( 'wp_ajax_nopriv_fws_delete_row', 'fws_delete_row' );
 

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

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

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

Большое вам спасибо за вашу помощь.

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

1. Вы создали переменную с именем $dbtable , затем ниже вы пытаетесь использовать $table . Вот почему это не работает: P Кроме того, было бы неплохо разработать свой плагин с WP_DEBUG установленным true значением, чтобы вы могли легче обнаруживать эти ошибки. Более подробную информацию см. В разделе Отладка в WordPress .

2. @cabrerahector на самом деле это не имеет значения, потому что $dbtable и $table — это одна и та же переменная на одной странице.

3. Хорошо, если ты так говоришь. На вашем месте я бы все равно включил журнал отладки, как было предложено.

4. @cabrerahector У меня включен режим отладки, и когда я нажимаю кнопку удаления, я не получаю ошибок отладки. Единственная ошибка отладки, которую я получаю, — это undefined index: submitDeleteEntry, который я изначально использовал для удаления записей, пока не получил более 1000 приспособлений. это отнимает много времени, продолжая перезагружать страницу и возвращаясь туда, где я был.

Ответ №1:

Я понял, где я ошибался, у меня просто был javascript внизу файла, я не зарегистрировал его правильно, как указано на этой странице https://codex.wordpress.org/AJAX_in_Plugins

Мне нужно было загрузить его в admin_footer, используя приведенный ниже код

 add_action( 'admin_footer', 'fws_delete_javascript' );
function fws_delete_javascript() { ?>
<script type="text/javascript">
                            jQuery(document).on('click', '.submitDeleteEntry', function () {
                                var id = this.id;
                                //alert(id);
                                jQuery.ajax({
                                    type: 'POST',
                                    url: ajaxurl,
                                    data: {"action": "fws_delete_row", "id": id},
                                    success: function (data) {
                   
                                    }
                                });
                            });
</script>
<?
}