настраиваемый_список_таблица редактировать/удалить массовые действия

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

Итак… это новая глава для меня, я искал решение в Google и нашел множество, но, к сожалению, ничего не сработало для меня.

        function column_title($item){

  $actions = array(
            'edit'      => sprintf('<a href="https://wordpress.stackexchange.com/questions/188237/?page=%s&action=%s&ID=%s">Редактировать</a>',$_REQUEST['page'],'edit',$item['ID']),
            'delete'    => sprintf('<a href="https://wordpress.stackexchange.com/questions/188237/?page=%s&action=%s&ID=%s">Удалить</a>',$_REQUEST['page'],'delete',$item['ID']),
        );

  return sprintf('%1$s %2$s', $item['ID'], $this->row_actions($actions) );
}

Выше я добавил действия для удаления и редактирования, и я думаю, что использовал sprintf правильно, но не уверен,
таблица базы данных содержит следующие столбцы ID, usr_id, date, begin, end, pause, egenb, tot и asum
я хочу, чтобы мои действия выбирали строки по ID, так что мой код выше правильный?

 function column_cb($item) {
    return sprintf(
        '<input type="checkbox" name="ID[]" value="%s" />', $item['ID']
    );    
}

Выше мой флажок, обычно name=”book[]” может кто-то объяснить, какова цель []?

    function process_bulk_action() {

    //Определяем, когда инициируется массовое действие...
    if( 'delete'===$this->current_action() ) {
        wp_die('Элементы удалены (или были бы удалены, если бы у нас были элементы для удаления)!');
    }   
}

И наконец, у нас есть process_bulk_action, где должен происходить процесс удаления и редактирования. Есть ли добрый человек, который может объяснить, как мне это сделать? Я не просто ищу быстрый ответ, а понимание этого. Я пробовал с множеством вещей, которые нашел через Google, но ни одно не оказало совершенно никакого эффекта и ни разу не имело смысла для меня.

Заранее спасибо всем, кто потратит время на чтение моего поста! 🙂

Выше мой флажок, обычно name=”book[]” может кто-то объяснить, какова цель
[]?

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

Помимо этого, я не могу понять, что вы пытаетесь сделать, чтобы иметь возможность ответить на другие вопросы. Особенно на последнюю часть. Похоже, что вы спрашиваете кого-то, чтобы он написал код для вас, для process_bulk_action()? Не хватает конкретного вопроса, чтобы ответить.

Ответ или решение

Обработка массовых действий для пользовательской таблицы в WordPress

Ваша задача заключается в реализации функций редактирования и удаления записей в пользовательской таблице WordPress с возможностью обработки массовых действий. Давайте рассмотрим, как это сделать, шаг за шагом, основываясь на предоставленном вами коде.

1. Реализация действий редактирования и удаления

Ваш код для колонки с действиями (column_title) выглядит правильно, за исключением некоторых аспектов, которые стоит уточнить. Чтобы действия “Редактировать” и “Удалить” работали корректно, вам нужно убедиться, что они направляют пользователей на правильные страницы и выполняют действия над объектами.

function column_title($item) {
    $actions = array(
        'edit' => sprintf('<a href="?page=%s&action=%s&ID=%s">Edit</a>', $_REQUEST['page'], 'edit', $item['ID']),
        'delete' => sprintf('<a href="?page=%s&action=%s&ID=%s">Delete</a>', $_REQUEST['page'], 'delete', $item['ID']),
    );

    return sprintf('%1$s %2$s', $item['ID'], $this->row_actions($actions));
}

Обратите внимание: изменения в URL должны использовать ? вместо &, чтобы правильно передать параметры.

2. Создание чекбокса для массовых действий

Функция column_cb создает чекбоксы для каждой строки таблицы. Знак [] в имени чекбокса позволяет передавать несколько значений в форме как массив. Если пользователь выберет несколько чекбоксов, значения будут собраны в массив и переданы на сервер.

function column_cb($item) {
    return sprintf(
        '<input type="checkbox" name="ID[]" value="%s" />', $item['ID']
    );    
}

3. Обработка массовых действий

В функции process_bulk_action вы определяете, что должно произойти при выборе действия. Например, если выбрано “Удалить”, вам нужно извлечь ID выбранных записей и выполнить удаление.

function process_bulk_action() {
    // Если выбрано действие "удалить"
    if ('delete' === $this->current_action()) {
        // Получение ID выбранных элементов
        $ids = isset($_POST['ID']) ? $_POST['ID'] : array();

        // Проверка существует ли ID
        if (!empty($ids)) {
            foreach ($ids as $id) {
                // Выполнение запроса на удаление
                $this->delete_item($id); // Предполагаем, что у вас есть метод для удаления
            }
            wp_redirect(esc_url(add_query_arg(array('deleted' => count($ids)), $_SERVER['REQUEST_URI'])));
            exit;
        } else {
            wp_die('Нет элементов для удаления!');
        }
    }

    // Добавьте обработку для других действий, если необходимо
}

// Метод для удаления записи
private function delete_item($id) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'your_custom_table'; // Замените на название вашей таблицы
    $wpdb->delete($table_name, array('ID' => $id));
}

Заключение

Теперь у вас есть полное понимание того, как реализовать функции редактирования и удаления в пользовательской таблице WordPress с поддержкой массовых действий. Не забудьте протестировать и проверить безопасность ваших операций, например, используя wp_nonce_field() для проверки запросов и защиты от CSRF.

Если у вас останутся вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться!

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

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