Vorrei aggiungere un'azione collettiva personalizzata a un tipo di post personalizzato. Mi sono imbattuto nel filtro bulk_actions-screenid
, che secondo la sua documentazione , farebbe esattamente quello che desidero . Tuttavia, dopo circa due ore di debug ho trovato il seguente commento // This filter can currently only be used to remove actions.
sulla riga 278 di class-wp-list-table.php - fantastico!
Ho pensato di poterlo hackerare usando jQuery per iniettare l'azione come opzione
/**
* 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
}
Questo funziona L'azione ora appare nel menu delle azioni collettive. Ero convinto di poter aggiungere un po 'di logica admin_init
per eseguire l'elaborazione necessaria, tuttavia sembra che create_invoice
non sia mai stato pubblicato. C'è qualcosa che sto facendo di sbagliato?
=== AGGIORNAMENTO ===
Ho aggiornato il codice per utilizzare l' load-*
hook. Quando applico l'azione in blocco su users.php - vedo che create_invoice
viene passata attraverso la richiesta. Tuttavia, su edit.php create_invoice
non viene mai stampato.
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');