問題描述
我想為自定義帖子類型添加自定義批量動作。我碰到過濾器 bulk_actions-screenid,根據它的 documentation,將會按照我的意願做。然而,經過大約兩個小時的調試,我發現以下評論// 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 是通過請求傳遞的。但是,在 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');
最佳解決方案
bulk_actions-*過濾器不允許您精確添加自定義批量操作,因為添加一個該操作的處理程序很棘手。更新了法典。
我建議使用 load-*動作而不是 admin_init 。請注意,您必須執行所有安全檢查,如 check_ajax_referrer() 和 current_user_can() 。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。