WP Brasil

Ações em massa personalizadas no WordPress 4.7

O WordPress 4.7 vai permitir que os desenvolvedores criem ações em massa personalizadas gerenciar as listas de conteúdo do painel administrativo. A novidade foi anunciada ontem, por Eric Andrew Lewis, no blog Make WordPress.

custom-bulk-action-screenshot

Agora desenvolvedores serão capazes de adicionar qualquer tipo de ações em massa utilizando os filtros bulk_actions-{screen_id} e handle_bulk_actions-{screen_id}.

Veja um exemplo de como implementar:

/**
 * Registra a ação em massa personalizada
 * utilizando o filtro bulk_actions-{screen_id}
 *
 * @param  array $actions Ações em massa.
 * @return array
 */
function my_register_post_bulk_actions( $actions ) {
    // Adicionando nossa nova ação em massa
    // com o ID "send_by_email" e título "Enviar por e-mail".
    $actions['send_by_email'] = __( 'Enviar por e-mail', 'textdomain' );

    return $actions;
}

add_filter( 'bulk_actions-edit-post', 'my_register_post_bulk_actions' );

/**
 * Lida com as ações em massa personalizadas
 * utilizando o filtro handle_bulk_actions-{screen_id}
 *
 * @param  string $redirect_to URL para redirecionar.
 * @param  string $action      ID da ação em massa.
 * @param  array  $post_ids    Conjunto de IDs dos posts.
 * @return string
 */
function my_post_bulk_action_handler( $redirect_to, $action, $post_ids ) {
    // Verifica se é o ID da nossa ação em massa
    // e se não for return $redirect_to.
    if ( 'send_by_email' !== $action ) {
        return $redirect_to;
    }

    // Processa a ação em massa "send_by_email"
    // para todos os posts selecionados.
    foreach ( $post_ids as $post_id ) {
        // Código aqui processando a ação em massa.
    }

    // Retorna de link adicionando o total de posts que foram
    // processados nesta ação em massa usando /?bulk_emailed_posts=X
    return add_query_arg( 'bulk_emailed_posts', count( $post_ids ), $redirect_to );
}

add_filter( 'handle_bulk_actions-edit-post', 'my_post_bulk_action_handler', 10, 3 );

/**
 * Exibe mensagens sobre a nossa ação em massa personalizada
 * utilizando o action "admin_notices".
 */
function my_bulk_action_admin_notice() {
    if ( ! empty( $_REQUEST['bulk_emailed_posts'] ) ) {
        $total = intval( $_REQUEST['bulk_emailed_posts'] );

        printf( '<div id="message" class="updated fade">' .  _n( '%d post foi enviado por e-mail.', '%d posts foram enviados por e-mail.', $total, 'textdomain' ) . '</div>', $total );
    }
}

add_action( 'admin_notices', 'my_bulk_action_admin_notice' );

Essa funcionalidade resolve um ticket criado 6 anos atrás, foi uma longa discussão e muitas linhas de código para chegar no resultado final, e provavelmente tornará alguns plugins que foram criados para atender essa necessidade obsoletos com o tempo.

Agora basta esperar até o lançamento do WordPress 4.7, que deve acontecer no dia 6 de Dezembro de 2016.

Powered by WPeMatico