Depuis WordPress 4.7 il y a trois « filter » qui nous permettent de prendre en main facilement la mise en place des actions groupées ou bulk actions depuis le backoffice, un traitement par lot quoi.
Concrètement ca ressemble à ça

Je me suis donc fait une petite class que je vous donne ici pour ajouter une ou plusieurs actions groupées sur vos écrans rapidement.
Comment ça fonctionne
Il faut initialiser la class avec deux variables: $sreen et $actions.
$ba = new BulkAction('edit-inscription', $actions);
La variable screen
Les actions groupée peuvent être ajouter dans plusieurs écrans dans l administration de WordPress. Voici les valeurs possibles :
- edit-post: l’écran d’édition des ‘post’
- edit-page: l’écran d’édition des ‘page’
- edit-<post-type-name>: l’écran d’édition des custom post type
- edit-<custom-taxonomy>: l’écran d’édition des custom taxonomy
- edit-comments: l’écran d’édition des commentaires
- plugins: l’écran d’édition des plugins
- users: l’écran d’édition des users
- upload: Media library list (ne fonctionne qu’en vue liste, pas en vue grille)
La variable actions
Cette variable est un tableau où vous devez déclarer trois choses:
- slug: le nom technique de l action à réaliser
- name: le nom lisible dans le select des actions
- function: l’action à réaliser, elle prend en paramètre l’id du ‘post’
Par exemple pour initialiser deux actions sur un custom post type ‘inscription », ça donne ceci:
$actions = [ [ 'slug' => 'validate', 'name' => 'Valider', 'function' => function($id) { // le code de ce que tu veux faire, ici un exemple basic avec ACF update_field('sac', 'ça valide !', $id); }, ],[ 'slug' => 'invalidate', 'name' => 'Invalider', 'function' => function($id) { // le code de ce que tu veux faire, ici un exemple basic avec ACF update_field('sac', 'ça valide pas !', $id); }, ], ]; $ba_inscription = new BulkAction('edit-inscription', $actions);
Ajouter la class bulk actions dans votre thème
Avant toutes choses, vous devez ajouter le fichier dans votre thème WordPress en insérant cette ligne dans votre fichier functions.php ( et en plaçant le fichier bulk_action.php à la racine du thème ).
require_once 'bulk_action.php';
Ensuite collez y le code suivant:
<?php class BulkAction{ function __construct($screen, $actions) { $this->screen = $screen; $this->actions = $actions; // sert à netoyer les urls si on utilise plusieurs actions à la suite $this->query_args_to_remove = []; foreach ($this->actions as $custom_action) { $this->query_args_to_remove[] = $custom_action['slug']; } // on ajoute les fonction à la liste dans le select add_filter('bulk_actions-'.$this->screen, function ($bulk_actions) { foreach ($this->actions as $action) { $bulk_actions[$action['slug']] = $action['name']; } return $bulk_actions; }); // l'action à executé add_filter('handle_bulk_actions-'.$this->screen, function($redirect_url, $action, $post_ids) { $redirect_url = remove_query_arg($this->query_args_to_remove, false); foreach ($this->actions as $custom_action) { if ($action === $custom_action['slug']) { foreach ($post_ids as $post_id) { $custom_action['function']($post_id); $redirect_url = add_query_arg($custom_action['slug'], count($post_ids), $redirect_url); } } } return $redirect_url; }, 10, 3); // affichage du message add_action('admin_notices', function() { foreach ($this->actions as $key => $custom_action) { if (!empty($_REQUEST[$custom_action['slug']])) { $num_changed = (int) $_REQUEST[$custom_action['slug']]; echo '<div class="notice notice-success is-dismissable"><p>Action '.$custom_action['name'].' sur '.$num_changed.' articles réussie.</p></div>'; } } }); } }
Voilà, maintenant vous pouvez invoquer les démons du 7eme cercle avec du sang de poulet vivant ! Joie !
En ce qui me concerne, je vais me coucher, bien bonne nuit à vous.