Eigene Bulk-Actions in Listen

Besonders gefeiert und vielleicht bereits bekannt sind die „Custom Bulk Actions“. Nach Jahren ist es endlich möglich ohne viel Aufwand eigene „Bulk Actions“ zu schreiben.

Eigene Bulk Actions seit WordPress 4.7
Eigene Bulk Actions seit WordPress 4.7

Rountrip mit Filtern, Funktionen und Erfolgsmeldung

Im Grunde ist es sehr leicht eine neue Bulk-Action zu registrieren. Alle Aktionen sind in einem „ID“ => „Label“ array gespeichert, welches über den „bulk_actions-edit-post“-Filter erweitert werden kann:

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

function register_my_bulk_actions( $bulk_actions ) {
  $bulk_actions['export_multiple'] = __( 'Export', 'acme');

  return $bulk_actions;
}

Nun können im Backend mehrere Einträge (Posts, Pages oder andere) markiert werden und im bekannten Dropdown (vgl. Screenshot oben) der Punkt „Export“ ausgewählt werden. Es muss nur noch definiert werden, was dieser tun soll:

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

function my_bulk_action_handler( $redirect_to, $action, $post_ids ) {
  if ( $action !== 'export_multiple' ) {
    // Nicht unsere action gewählt => nichts weiter tun
    return $redirect_to;
  }

  foreach ( $post_ids as $post_id ) {
    // Hier kommt der Code für den Export hin.
  }
 
  // Anschließend zurück zur Liste mit Erfolgsmeldung
  $redirect_to = add_query_arg(
    'bulk_export_multiple',
    count( $post_ids ),
    $redirect_to
  );

  return $redirect_to;
}

Das war auch schon die ganze Magie. An dieser Stelle kann nicht nur ein Export per CSV oder ähnliches stehen, sondern auch ganz andere Funktionen wie direktes Löschen, Duplizieren, Zusammenfassen zweier Artikel – was die Phantasie so her gibt. Zu guter Letzt noch eine Erfolgsmeldung für den Benutzer.

add_action( 'admin_notices', 'my_bulk_export_multiple_notice' );
 
function my_bulk_export_multiple_notice() {
  if ( empty( $_REQUEST['bulk_export_multiple'] ) ) {
    // scheinbar nicht in unserem Kontext => early exit
    return;
  }

  // inform the user how many have been exported
  $count = intval( $_REQUEST['bulk_export_multiple'] );
  printf(
    '<div id="message" class="updated fade">'
    . __( '%s exportiert.', 'acme' )
    . '</div>',
    $count
  );
}

Was zuvor kompliziert mit regulären Ausdrücken oder über DOMNodes gelöst werden musste geht nun echt bequem über ein paar Filter. Wir dürfen gespannt sein, welche Plugins basierend darauf entstehen und sinnvolle Bulk-Actions für Seiten, Beiträge und Medien. Jetzt ein paar reichhaltige sinnvolle Aktionen zu schreiben kann sich lohnen.

Überfällig und gefeiert

Sechs Jahre ist das Ticket alt, welches nach Custom Bulk Actions fragt. Mit WordPress 4.7 wurde dieses Feature endlich umgesetzt und ist bei weitem nicht das älteste, welches gelöst wurde. Demnächst dürfen Seiten auch Passwörter mit 255 Zeichen, anstatt von nur 20, haben. Das wurde vor 12 Jahren von WordPress gefordert.

Zwei sinnvolle Anfragen, deren Umsetzung nun natürlich gefeiert werden dürfen. Der Blog-Beitrag auf make.wordpress.org und später auf WPTavern wurde reichlich geteilt. Doch auch die anderen Features haben es in sich, welche ich hier vorstellen möchte.