Групові події (bulk_actions) в таблицях: постів, сторінок, користувачів, коментарів…
Майже кожна таблиця в адмінці WordPress дозволяє масово редагувати елементи: записи, плагіни, користувачів, коментарі тощо. З версії WP 4.7 з’явилися спеціальні хуки, щоб додавати в такі масові дії власні, а потім їх обробляти. Такий функціонал нам звичайно стане в нагоді, тому давайте його терміново розберемо. Крім того, це робиться дуже просто!
Пройдемося кроками, і на прикладі подивимося, як додавати свої групові функції та їх обробники.
Нам знадобляться три хуки, за допомогою яких можна додати “дію” в будь-яку “рідну таблицю WP” типу WP_List_Table :
Як дізнатися ID екрана (screen_id) дивіться в описі функції current_screen .
Відео на тему:
Крок 1. Додавання елемента (option) у список, що випадає

Потрібно прикріпити функцію до динамічного фільтра bulk_actions-(screen_id) , яка додати наш новий елемент (option) до масиву вже існуючих дій.
(screen_id)необхідно замінити на ID поточного екрана адмінки. На сторінці списку записів – це edit-post, тому хук виглядатиме так:
add_filter( 'bulk_actions-'.'edit-post', 'register_my_bulk_actions' );
function register_my_bulk_actions( $bulk_actions ){
$bulk_actions['my_action'] = 'Моя дія';
return $bulk_actions;
}Крок 2. Перехоплення запиту та обробка (сабміт форми)
Використовуємо хук-фільтр handle_bulk_actions-(screen_id) . (screen_id)також слід замінити на ID екрана.
У разі успішного виконання операції потрібно повернути змінений параметр $redirect_to . У ньому потрібно змінити URL, додати параметр запиту, щоб потім вивести повідомлення про успішне виконання операції або про помилку. Зміна параметра $redirect_to сигналізує, що потрібно перезавантажити сторінку і визначає, на який URL потрібно зробити перенаправлення.
add_filter( 'handle_bulk_actions-'.'edit-post', 'my_bulk_action_handler', 10, 3);
function my_bulk_action_handler( $redirect_to, $doaction, $post_ids ){
// нічого не робимо, якщо це не наша дія
if( $doaction !== 'my_action' )
return $redirect_to;
foreach( $post_ids as $post_id ){
// Дія кожного посту
}
$redirect_to = add_query_arg( 'my_bulk_action_done', count( $post_ids ), $redirect_to );
return $redirect_to;
}Останній параметр хука може відрізнятися, залежно від сторінки на який ми додаємо масову дію: у користувачів там буде ID обраних користувачів, в коментарях коментарі… Детальніше дивіться в описі хука (посилання вище).
Крок 3. Показ повідомлення
Щоб користувачі бачили, що щось сталося і що саме сталося: успішна операція або була помилка, їм потрібно показати повідомлення про результат операції.

Зробити це дуже просто: перевіряємо наявність вказаної в URL-адресі змінної і якщо вона є виводимо потрібне повідомлення за допомогою хука admin_notices .
add_action( 'admin_notices', 'my_bulk_action_admin_notice');
function my_bulk_action_admin_notice(){
if( empty( $_GET['my_bulk_action_done'] ) )
return;
$data = $_GET['my_bulk_action_done'];
$msg = sprintf( 'Моя дія обробила записи: %d.', intval($data) );
echo '<div id="message" class="updated"><p>'. $msg .'</p></div>';
}–
На цьому все. Успіхів!