Я хотел бы добавить пользовательское массовое действие к пользовательскому типу записи. Я наткнулся на фильтр bulk_actions-screenid
, который, согласно его документации , будет работать именно так, как я хочу . Однако примерно после двух часов отладки я нашел следующий комментарий// This filter can currently only be used to remove actions.
к строке 278 class-wp-list-table.php - отлично!
Я подумал, что смогу взломать его, используя jQuery для добавления действия в качестве опции
/**
* 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
}
Это работает. Действие теперь появляется в меню массовых действий. Я предполагал, что смогу добавить некоторую логику admin_init
для выполнения необходимой обработки - однако, похоже, что create_invoice
она никогда не публикуется. Я что-то не так делаю?
=== ОБНОВЛЕНИЕ ===
Я обновил код, чтобы использовать load-*
хук. Когда я применяю массовое действие к users.php - я вижу, create_invoice
что передается через запрос. Тем не менее, на edit.php create_invoice
никогда не печатается.
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');