我想向自定义帖子类型添加自定义批量操作。我遇到了过滤器bulk_actions-screenid
,根据它的文档,该过滤器将完全按照我的意愿工作。但是,经过大约两个小时的调试,我// This filter can currently only be used to remove actions.
在class-wp-list-table.php的278行找到了以下注释-太好了!
我想我可以通过使用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
是通过请求传递的。但是,create_invoice
从不打印edit.php 。
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');