Chciałbym dodać niestandardową akcję zbiorczą do niestandardowego typu postu. Natknąłem się na filtr bulk_actions-screenid
, który zgodnie z jego dokumentacją działałby dokładnie tak, jak chciałbym . Jednak po około dwóch godzinach debugowania znalazłem następujący komentarz // This filter can currently only be used to remove actions.
w wierszu 278 klasy-wp-list-table.php - świetnie!
Pomyślałem, że mogę go zhakować, używając jQuery do wstrzyknięcia akcji jako opcji
/**
* 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
}
To działa. Akcja pojawi się teraz w menu akcji zbiorczych. Przyjąłem założenie, że mógłbym dodać trochę logiki admin_init
do niezbędnego przetwarzania - wydaje się jednak, że create_invoice
nigdy nie jest wysyłany. Czy coś robię źle?
=== AKTUALIZACJA ===
Zaktualizowałem kod, aby użyć load-*
haka. Kiedy zastosuję akcję zbiorczą na users.php - widzę, że create_invoice
jest przekazywana przez żądanie. Jednak na edit.php create_invoice
nigdy nie jest drukowany.
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');