問題描述

我想為自定義帖子類型添加自定義批量動作。我碰到過濾器 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。