Используя wp_list_table, как вызвать функцию обновления “inline”?

Вопрос или проблема

Хорошо, я использовал 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 запросами для предотвращения возможных уязвимостей.

Оцените материал
Добавить комментарий

Капча загружается...