Групові події (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>'; }
–
На цьому все. Успіхів!