Удалить строку пользовательской таблицы в WordPress с помощью AJAX
Из моей пользовательской таблицы ($table = $wpdb->prefix . 'user_req';
) Я показываю данные с помощью $wpdb->get_results()
и цикла foreach:
Мне удалось обновить базу данных отдельными значениями из формы, где есть кнопка "Отправить". Но из этой таблицы я хочу удалить любую строку, нажав на кнопку (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. Поэтому мы будем очень признательны за любую помощь.
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');