WordPress: Eigene Sammelaktionen (Bulk-Actions) definieren

2016-10-20_16-37-31

Hinweis: Dieser Beitrag beschreibt ein Feature, das erst in Version 4.7 verfügbar ist (geplanter Veröffentlichungstermin: 6. Dezember 2016).

Bisher war es schwierig, eigene Sammelaktionen in WordPress hinzuzufügen. Version 4.7 hat einen Hook erhalten, mit dem man einfach die Sammelaktionen erweitern kann.

Hook anlegen

Als Beispiel nehme ich die Beiträge-Seite, dementsprechend sind die Variablen benannt.

Man kann mehr als eine Sammelaktion in dieser Funktion definieren, denn hier passiert nichts anderes, als dass dem Feld $bulk_actions ein weiteres Element zugefügt wird. Man muss lediglich darauf achten, dass man unterschiedliche Elementschlüssel und, sinnvollerweise, unterschiedliche Anzeigetexte verwendet.

Die Screen-IDs

Die „Screen-ID“ einer Seite kann mit diesem Code ermittelt werden:

Die folgende Tabelle listet die IDs der wichtigsten Seiten auf:

Seite$screen_idDatei
Mediathekuploadupload.php
Kommentareedit-commentsedit-comments.php
Schlagwörteredit-post_tagedit-tags.php
Pluginspluginsplugins.php
Linkslink-managerlink-manager.php
Benutzerusersusers.php
Beiträgeedit-postedit.php
Seitenedit-pageedit.php
Webseite bearbeiten: Themessite-themes-networknetwork/site-themes.php
Themesthemes-networknetwork/themes
Benutzerusers-networknetwork/users
Webseite bearbeiten: Benutzersite-users-networknetwork/site-users
Webgsitessites-networknetwork/sites

Callback-Funktion definieren

Zur Übersicht erst einmal die gesamte Funktion:

Wie oben beschrieben, kann man mehr als eine eigene Sammelaktionen definieren, aber nur eine Aktion-Callback-Funktion. In dieser Funktion muss man deshalb zunächst abfragen, welche Sammelaktion ausgewählt wurde (Zeilen 3 und 12).
Als nächstes werden die Beiträge mit einer foreach -Schleife jeweils einzeln abgearbeitet. In dieser Schleife man z.B. mit get_post() oder get_post_meta() den jeweiligen Beitrag laden und bearbeiten.
Anschließend werden die die geänderten Daten mit wp_update_post($post) oder update_post_meta($post) zurück in die Datenbank geschrieben.
Die Variable $redirect_to gibt an, zu welcher URI der Browser wechselt, nachdem die Sammelaktion abgeschlossen ist, in unserem Fall .../wp-admin/edit.php?paged=1 . Wir wollen allerdings nicht die Seite ändern, zu der der Browser geleitet wird, sondern die Variable benutzen, um einen Wert zu übergeben. Mit der Funktion add_query_arg() fügen wir ein Argument zu der URL hinzu, der die Anzahl der bearbeiteten Beiträge angibt: .../wp-admin/edit.php?paged=1&bulk_posts_processed=1 (Zeilen 11 und 21).

Erfolgsmeldung ausgeben

Nach Abschluss der Sammelaktion kann eine Erfolgsmeldung („admin notice“) mittels der Aktion admin_notices ausgeben werden. Der zweite Parameter muss den Textstring enthalten, den wir im Filter bulk_actions-{screen-id} definiert haben.

Die Anzahl der bearbeiteten Elemente können wir über den URL-Parameter  bulk_posts_processed  ermitteln, den wir vorher mit $redirect_to = add_query_arg() hinzugefügt haben.

Trivia

Zum Schluss ein kleiner Fun Fact: Das entsprechende Ticket (https://core.trac.wordpress.org/ticket/16031“ title=“Linkificator: https://core.trac.wordpress.org/ticket/16031„>https://core.trac.wordpress.org/ticket/16031“ target=“_blank“>#16031) wurde vor sechs Jahren eröffnet, also 2010, da waren wir bei WordPress v3.0.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.