Me gustaría agregar una acción masiva personalizada a un tipo de publicación personalizada. Encontré el filtro bulk_actions-screenid
, que, de acuerdo con su documentación , haría exactamente lo que deseo . Sin embargo, después de aproximadamente dos horas de depuración, encontré el siguiente comentario // This filter can currently only be used to remove actions.
en la línea 278 de class-wp-list-table.php - ¡genial!
Me di cuenta de que podría hackearlo utilizando jQuery para inyectar la acción como una opción
/**
* 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
}
Esto funciona. La acción ahora aparece en el menú de acciones masivas. Supuse que podría agregar algo de lógica a admin_init
para realizar el procesamiento necesario; sin embargo, parece que create_invoice
nunca se publica. ¿Hay algo que estoy haciendo mal?
=== ACTUALIZACIÓN ===
Actualicé el código para usar el gancho load-*
. Cuando aplico la acción masiva en users.php, veo que create_invoice
se pasa a través de la solicitud. Sin embargo, en edit.php create_invoice
nunca se imprime.
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');