Массовое редактирование в таблицах WordPress: посты, страницы, пользователи…

МАССОВЫЕ ДЕЙСТВИЯ В ТАБЛИЦАХ: ПОСТЫ, СТРАНИЦЫ, ПОЛЬЗОВАТЕЛИ, КОММЕНТАРИИ…

Почти каждая таблица в админ-панели 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 .'

';

}


Вот и всё. Удачи!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *