#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>
<?
}