Je voudrais ajouter une action groupée personnalisée à un type de publication personnalisé. Je suis tombé sur le filtre bulk_actions-screenid
, qui , selon sa documentation , ferait exactement ce que je veux . Cependant, après environ deux heures de débogage, j'ai trouvé le commentaire suivant // This filter can currently only be used to remove actions.
sur la ligne 278 de class-wp-list-table.php - super!
J'ai pensé que je pouvais le pirater en utilisant jQuery pour injecter l'action en option
/**
* 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
}
Cela marche. L'action apparaît maintenant dans le menu d'actions groupées. J'étais dans l'hypothèse que je pourrais alors ajouter de la logique admin_init
pour faire le traitement nécessaire - cependant, il semble que ce create_invoice
ne soit jamais publié. Y a-t-il quelque chose que je fais mal?
=== MISE À JOUR ===
J'ai mis à jour le code pour utiliser le load-*
crochet. Lorsque j'applique l'action en masse sur users.php - je vois que create_invoice
la demande est transmise. Cependant, sur edit.php create_invoice
n'est jamais imprimé.
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');