Вопрос или проблема
Хорошо, я использовал wp_list_table для чтения данных из пользовательской таблицы базы данных, и я хотел бы иметь возможность обновлять таблицу базы данных, щелкая по соответствующей ячейке. Значения по умолчанию равны 0, и при нажатии значение устанавливается на 1.
Таким образом, при нажатии на ячейку будет вызвана функция updateVisitor() “на лету”.
Моя функция, которая не является частью класса Visitors, расширяющего WP_list_table.
function updateVisitor($id){
global $wpdb;
$query = $wpdb->prepare( "UPDATE tbl_visitor SET visitorPayed =BINARY(visitorPayed=1) WHERE visitorID = %d", intval($id) );
$result = $wpdb->query( $query );
}
Хорошо, это не самое красивое решение, но оно работает.
Я перенес функцию обновления в update.php, также wp-load.php.
$(".col_visitor").click(function(){
visitorID = $(this).attr('id');
//alert('тестирование '+visitorID);
$.ajax({ url: 'update.php',
data: {action: visitorID},
type: 'post',
success: function(output) {
//alert(output);
window.location.reload(); //обновляем, чтобы увидеть обновленные значения
}
});
});//#конец клика
.
Ответ или решение
Как реализовать обновление данных в wp_list_table с использованием функции updateVisitor "inline"
Введение
Использование wp_list_table
в WordPress позволяет удобно отображать данные, но, как показывает ваш вопрос, может возникнуть необходимость в интерактивном обновлении данных при клике по ячейкам. В данном руководстве мы рассмотрим, как добавить функцию обновления в вашу таблицу, чтобы при клике на ячейку данные обновлялись "inline".
Шаг 1: Создание функции обновления
Ваш код для функции обновления, который принимает идентификатор записи и обновляет базу данных, выглядит корректно. Однако, нам необходимо настроить его так, чтобы он вызывался правильно из Ajax-запроса.
function updateVisitor($id) {
global $wpdb;
$query = $wpdb->prepare(
"UPDATE tbl_visitor SET visitorPayed = BINARY(visitorPayed=1) WHERE visitorID = %d",
intval($id)
);
return $wpdb->query($query);
}
Эта функция принимает идентификатор visitorID
и обновляет значение visitorPayed
в базе данных.
Шаг 2: Обработка Ajax-запроса
Теперь мы должны создать файл update.php
, который будет обрабатывать входящие Ajax-запросы и вызывать вашу функцию обновления.
// update.php
require_once('wp-load.php'); // Не забывайте подключить wp-load.php
if (isset($_POST['action']) && isset($_POST['visitorID'])) {
$visitorID = intval($_POST['visitorID']);
updateVisitor($visitorID);
echo "success"; // Можете вернуть информацию для успешного выполнения
exit;
}
Шаг 3: Подключение jQuery для обработки клика
В вашем скрипте jQuery, вам необходимо передать идентификатор visitorID
в запросе. Вот ваш обновленный код:
$(".col_visitor").click(function() {
var visitorID = $(this).attr('id'); // Получаем ID по нажатию на ячейку
$.ajax({
url: 'update.php',
type: 'post',
data: {
action: 'update_visitor',
visitorID: visitorID
},
success: function(output) {
alert(output); // Сообщение об успешности операции
window.location.reload(); // Перезагружаем страницу для обновленных данных
},
error: function() {
alert("Произошла ошибка при обновлении.");
}
});
});
Шаг 4: Подключение скриптов
Не забудьте подключить jQuery и ваши пользовательские скрипты в вашем плагине или теме WordPress:
function custom_admin_scripts() {
wp_enqueue_script('jquery');
// Ваши скрипты JS здесь
}
add_action('admin_enqueue_scripts', 'custom_admin_scripts');
Заключение
С использованием вышеизложенных шагов вы сможете легко интегрировать функцию обновления данных в wp_list_table
через Ajax-запросы при клике на ячейку. Это решение предоставляет пользователям удобный интерфейс для интерактивного обновления данных без необходимости перезагрузки страницы, что существенно улучшает пользовательский опыт.
Убедитесь, что вы протестировали все изменения и следите за безопасностью при работе с POST
запросами для предотвращения возможных уязвимостей.