Вопрос или проблема
Итак… это новая глава для меня, я искал решение в 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.
Если у вас останутся вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться!