Сегодня мы рассмотрим как добавить массовое действие (bulk action) в медиа-галереию.

Немного отойдём от темы, на секундочку. Хочу порекомендовать лучшую программу для просмотра IPTV на компьютере SimpleTV – до этой программы не любил этот вид телевидения, но с ней всё изменилось – отличный интерфейс, всё удобно, и кроме того, он может проигрывать и другие медиа-файлы.

Вы находитесь в медиагалереи, у вас вывод файлов в виде списка, и вверху слева есть выпадающее меню выбора массовых действий, которые могут быть применены ко всем выбранным файлам. Такое же, как на скриншоте ниже.

У WP для этих целей есть специальный хук, который позволяет добавить в выпадающее меню массовых действий любого экрана нужное действие.

Добавить действие в выпадающее меню

add_filter( 'bulk_actions-upload', 'register_my_bulk_action' );
 
function register_my_bulk_action($bulk_actions) {
$bulk_actions['assign-to-cat'] = __( 'Assign to Category', 'assign-to-cat');
return $bulk_actions;
}

Как видите, с помощью хука bulk_action-{screen_name}, где {screen_name} любое из существующих экранов WP, мы добавляем элемент массового меню только на страницу upload.

Добавить обработчик массового действия

add_filter( 'handle_bulk_actions-upload', 'my_bulk_action_handler', 10, 3 );
 
function my_bulk_action_handler( $redirect_to, $doaction, $post_ids ) {
if ( $doaction !== 'assign-to-cat' ) {
return $redirect_to;
}
foreach ( $post_ids as $post_id ) {
// действие, которое нужно сделать
}
$redirect_to = add_query_arg( 'assigned-to-cat', count( $post_ids ), $redirect_to );
return $redirect_to;
}

С помощью хука handle_bulk_actions-{screen_name}, где {screen_name} — имя нужного экрана, мы добавляем обработчик, в котором выполняем проверку, нужное ли действие из меню было выбрано, и затем для всех постов, которые были выбраны выполнится нужное действие.

Это ещё не всё… Выведем уведомление

Это, что называется, опшинал пункт. При необходимости можно вывести уведомление, что-то вроде «45 фотографий переименованы» сразу же, после завершения выполнения работы массового действия.

add_action( 'admin_notices', 'my_bulk_action_admin_notice' );
 
function my_bulk_action_admin_notice() {
if ( ! empty( $_REQUEST['assigned-to-cat'] ) ) {
$ass_count = intval( $_REQUEST['assigned-to-cat'] );
printf( '<div id="message" class="updated fade">' .
_n( 'Сделано %s действий.',
'Сделано %s действий.',
$ass_count,
'my_handler_name'
) . '</div>', $ass_count );
}
}

Скачать программу «SimpleTV» можно здесь.

Понравилась или помогла статья?
Купите мне кофеКупите мне кофе