Ich möchte einem benutzerdefinierten Beitragstyp eine benutzerdefinierte Sammelaktion hinzufügen. Ich bin auf den Filter gestoßen bulk_actions-screenid
, der laut Dokumentation genau das tun würde, was ich wollte . Nach ungefähr zwei Stunden Debugging fand ich den folgenden Kommentar // This filter can currently only be used to remove actions.
in Zeile 278 von class-wp-list-table.php - großartig!
Ich dachte, ich könnte es hacken, indem ich jQuery verwende, um die Aktion als Option zu injizieren
/**
* Hack to add a custom bulk action.
*/
public function admin_footer() {
if($_GET['post_type'] != self::POST_TYPE) return;
?>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('<option>').val('create_invoice').text('Bill').appendTo("select[name='action']");
});
</script>
<?php
}
Das funktioniert. Die Aktion wird jetzt im Menü für Massenaktionen angezeigt. Ich war unter der Annahme, dass ich dann einige Logik hinzufügen könnte admin_init
, um die notwendige Verarbeitung durchzuführen - es scheint jedoch, dass dies create_invoice
niemals gebucht wird. Gibt es etwas, was ich falsch mache?
=== UPDATE ===
Ich habe den Code aktualisiert, um den load-*
Hook zu verwenden. Wenn ich die Bulk-Aktion auf users.php anwende, create_invoice
wird die Anforderung wie ich sehe durchlaufen. Auf edit.php create_invoice
wird jedoch nie gedruckt.
function a39x2_admin_footer() {
?>
<script type="text/javascript">
jQuery(document).ready(function() {
jQuery('<option>').val('create_invoice').text('Bill').appendTo("select[name='action']");
jQuery('<option>').val('create_invoice').text('Bill').appendTo("select[name='action2']");
});
</script>
<?php
}
add_action('admin_footer', 'a39x2_admin_footer');
function a39x2_load() {
echo "<pre>" . print_r($_REQUEST, true) . "</pre>";
}
add_action('load-edit.php', 'a39x2_load');
add_action('load-users.php', 'a39x2_load');