Me gustaría agregar una acción masiva personalizada a un tipo de publicación personalizada. Encontré el filtro bulk_actions-screenid
, que según su documentación , haría exactamente lo que quisiera . 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!
Pensé que podría hackearlo usando 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 admin_init
para hacer 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 load-*
gancho. 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');