МАССОВЫЕ ДЕЙСТВИЯ В ТАБЛИЦАХ: ПОСТЫ, СТРАНИЦЫ, ПОЛЬЗОВАТЕЛИ, КОММЕНТАРИИ…
Почти каждая таблица в админ-панели WordPress позволяет выполнять массовое редактирование элементов: постов, плагинов, пользователей, комментариев и так далее. Начиная с версии WP 4.7, появились специальные хуки, которые позволяют добавлять собственные действия к этим массовым действиям и обрабатывать их. Эта функциональность может оказаться очень полезной, так что давайте разберемся с ней.
Шаг 1. ДОБАВЛЕНИЕ ЭЛЕМЕНТА (ОПЦИИ) В ВЫПАДАЮЩИЙ СПИСОК
Чтобы добавить новую опцию в массив существующих действий, вам нужно привязать функцию к динамическому фильтру bulk_actions-(screen_id)
.
Замените (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 выбранных пользователей, для комментариев — 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 ''. $msg .'
';
}
Вот и всё. Удачи!