Групові події (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>';
}

На цьому все. Успіхів!

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *