Удалить строку пользовательской таблицы в WordPress с помощью AJAX


Из моей пользовательской таблицы ($table = $wpdb->prefix . 'user_req';) Я показываю данные с помощью $wpdb->get_results() и цикла foreach:

my table

Мне удалось обновить базу данных отдельными значениями из формы, где есть кнопка "Отправить". Но из этой таблицы я хочу удалить любую строку, нажав на кнопку (x) справа от каждой строки. Я могу использовать $_GET[] и легко удалить строку, но в этом случае я хочу использовать AJAX.

Кнопка (x) справа от каждой строки на самом деле это:

<input type="button" class="delete" title="Exclude This One"/>

Я не программист, поэтому я действительно борюсь с этим. Большинство решений приходит, когда я ищу, для необработанного PHP-MySQL, но я пытаюсь справиться с этим с помощью WordPress. Я мог бы подготовить свой запрос на удаление $wpdb:

<?php $wpdb->delete( $table, array( 'post_id' => $products->post_id ) ); ?>

Но не смог справиться с этим способом WordPress-AJAX. Поэтому мы будем очень признательны за любую помощь.

Author: Mayeenul Islam, 2014-02-22

1 answers

Нонс

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

Установка идентификатора ЗАПИСИ и номера

Вам нужно будет добавить идентификатор конкретной записи в кнопку "Удалить" или в скрытое поле ввода, связанное с этой записью. У меня есть пример настройки, поэтому вам нужно будет добавить post_id и nonce к идентификатору элемента в формате, таком как #delete_postid_nonce. Ваш идентификатор элемента нужно было бы закончить так: #delete_12_94f3a1e666.

Вы могли бы назначить его с помощью: $element_id = 'delete_' . $products->post_id . '_' . wp_create_nonce('delete_' . $products->post_id );

Добавление действий

Их необходимо поместить в functions.php или в пользовательском плагине.

Вы заметите, что есть два вызова add_action. Один предназначен для привилегированных пользователей (т. Е. они вошли в систему), а другой - для непривилегированных пользователей. Удалите одно или другое, если вам не нужно и то, и другое. Вы можете прочитать больше об этом в Кодексе.

Функция delete_row()

Это должно быть помещенный в functions.php или в пользовательском плагине.

Здесь вы хватаете id, который мы отправили в объект data вызова ajax. Это анализируется и помещается в массив POST, так как type вызова ajax имеет значение POST.

Затем вы explode() идентификатор из идентификатора элемента, отправленного в вызове ajax (например, '#delete_12_94f3a1e666'), который оставит вас с $id = array('delete', 12, '94f3a1e666');. Таким образом, post_id равен индексу [1].

Затем вам echo вернуться data к success часть вызова ajax. А затем вы убиваете функцию php, вызывая "die".


Вам нужно будет изменить этот код, чтобы он работал на 100%.

JS:

jQuery(document).on('click', '.delete', function () {
    var id = this.id;
    jQuery.ajax({
        type: 'POST',
        url: ajaxurl,
        data: {"action": "your_delete_action", "element_id": id},
        success: function (data) {
            //run stuff on success here.  You can use `data` var in the 
           //return so you could post a message.  
        }
    });
});

PHP:

function delete_row() {
    $id = explode('_', sanitize_text($_POST['element_id']));
    if (wp_verify_nonce($id[2], $id[0] . '_' . $id[1])) {
                $table = 'yourtable';
        $wpdb->delete( $table, array( 'post_id' => $id[1] ) );

        echo 'Deleted post';
        die;
    } else {
        echo 'Nonce not verified';
        die;
    }

}

add_action('wp_ajax_your_delete_action', 'delete_row');
add_action( 'wp_ajax_nopriv_your_delete_action', 'delete_row');
 4
Author: CommandZ, 2014-02-24 18:34:46