Произвольный Bulk Actions (wp 4.7). Как создать свое действие для списка постов(например) в админке?

Здравствуйте я продолжаю разбираться с нововведениями в wordpress версия 4.7. Кроме возможности добавления шаблонов в записям и постам, был анонсирован функционал который позволяет добавить свое bulk событие для записей или страниц или например пользователей в админке. На мой взгляд это очень удобно, так например можно сделать рассылку писем определенным пользователям, при этом функционал можно добавить прямо к стандартному списку пользователей. Можете рассказать про bulk action чуть подробнее?

Добавить Комментарий
Ответ

В WordPress с версии 4.7 появилась возможно добавлять свои события для работы со списками в админке. События для работы со списками называются  Bulk Actions. Разберем как можно добавить событие, отловить его для обработки и вывести результат обработки.

Для начала добавим в выпадающий список свое событие:

 add_filter( 'bulk_actions-edit-post', 'register_my_bulk_actions' );
function register_my_bulk_actions($bulk_actions) {
 $bulk_actions['email_to_eric'] = __( 'Email to Eric', 'email_to_eric');
 return $bulk_actions;
 }
 

Мы добавили событие ‘Email to Eric’ для выпадающего списка работы с записями в админке. Данное событие добавилось именно к записям. Потому что в  экшене bulk_actions-edit-post после «bulk_actions-» мы прописали «edit-post». Вторая часть экшена «bulk_actions-{screen_id}» — отвечает  за то, к какому списку будет прикреплен наш bulk. Получить вторую часть можно с помощью функции get_current_screen() подробнее

Следующим шагом мы должны отловить наше событие, что бы произвести какие либо действия, для которых собственно мы и создаем bulk

 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 !== 'email_to_eric' ) {
 return $redirect_to;
 }
 foreach ( $post_ids as $post_id ) {
 // тут наш код обрабатывает каждый полученный id, например
 }
 $redirect_to = add_query_arg( 'bulk_emailed_posts', count( $post_ids ), $redirect_to );
 return $redirect_to;
 }
 

После того как мы обработали, мы возвращаем url с параметрами. в которых мы должны передать сведения о том, были ли ошибки или наоборот что все хорошо, после выполнения наших действий. За это отвечает этот код, в котором мы добавили параметры и вернули ссылку для редиректа:

 $redirect_to = add_query_arg( 'bulk_emailed_posts', count( $post_ids ), $redirect_to );
 return $redirect_to;
 

Следующим шагом у нас вывод на экран результата работы:

 add_action( 'admin_notices', 'my_bulk_action_admin_notice' );
function my_bulk_action_admin_notice() {
 if ( ! empty( $_REQUEST['bulk_emailed_posts'] ) ) {
 $emailed_count = intval( $_REQUEST['bulk_emailed_posts'] );
 printf( '<div id="message" class="updated fade">' .
 _n( 'Emailed %s post to Eric.',
 'Emailed %s posts to Eric.',
 $emailed_count,
 'email_to_eric'
 ) . '</div>', $emailed_count );
 }
 }
 

Полную версию сообщения о bulk actions смотрите тут(https://make.wordpress.org/core/2016/10/04/custom-bulk-actions/)

Добавить Комментарий

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.