Custom bulk_action

时间:2011-09-29 作者:v0idless

我想向自定义帖子类型添加自定义批量操作。我碰到了过滤器bulk_actions-screenid, 根据其documentation, 完全按照我的意愿去做。然而,经过大约两个小时的调试,我发现了以下评论// This filter can currently only be used to remove actions. 在wp类列表的第278行。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-* 钩当我对用户应用批量操作时。php-我明白了create_invoice 通过请求传递。但是,在编辑时。phpcreate_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\');

3 个回复
最合适的回答,由SO网友:engelen 整理而成

考虑到这个问题的普遍性,我认为最新的主要版本保证了这个问题有一个新的答案。

Since WordPress 4.7 (released December 2016) it is possible to add custom bulk actions without using JavaScript.

过滤器bulk_actions-{$screen} (例如。bulk_actions-edit-page 对于页面概述),现在允许您添加自定义批量操作。此外,一项新的行动称为handle_bulk_actions-{$screen} (例如。handle_bulk_actions-edit-page) 允许您处理操作的执行。

这些都解释得很清楚this blog post.例如,假设我们想添加一个批量操作,以通过电子邮件发送页面概述上所选项目的标题。我们可以这样做:

举个小例子,我们在批量操作下拉列表中添加一个操作,并向其添加一个处理函数。

将批量操作添加到下拉列表中:

function wpse29822_page_bulk_actions( $actions ) {
    // Add custom bulk action
    $actions[\'my-action-handle\'] = __( \'My Custom Bulk Action\' );
    return $actions;
}
add_action( \'bulk_actions-edit-page\', \'wpse29822_page_bulk_actions\' );
为批量操作添加处理程序:

function wpse29822_page_bulk_actions_handle( $redirect_to, $doaction, $post_ids ) {
    // Check whether action that user wants to perform is our custom action
    if ( $doaction == \'my-action-handle\' ) {
        // Do stuff
    }
    return $redirect_to;
}
add_action( \'handle_bulk_actions-edit-page\', \'wpse29822_page_bulk_actions_handle\', 10, 3 );

SO网友:scribu

这个bulk_actions-* 过滤器不允许您精确地添加自定义批量操作,因为为该操作添加处理程序很困难。更新了法典。

我建议使用load-* 操作而不是admin_init. 请注意,您必须执行所有安全检查,如check\\u ajax\\u referer()和current\\u user\\u can()。

SO网友:Themesfa

您必须使用bulk_actions 筛选时间WP_Screen 对象已定义。像这样:

add_action( \'current_screen\', \'custom_bulk_actions\' );
function custom_bulk_actions() {
    if( current_user_can( \'administrator\' ) {
        add_filter( \'bulk_actions-edit-post\'       , \'register_custom_bulk_actions\' );
        add_filter( \'handle_bulk_actions-edit-post\', \'custom_bulk_action_handler\', 10, 3 );
        add_action( \'admin_notices\'                , \'custom_bulk_action_admin_notice\' );
    }
}    

结束

相关推荐

Bulk User Deletion

我创建了一个WordPress 3.0站点,启用了多站点,并安装了BuddyPress插件(每个插件的最新可用版本)。最初,该网站没有启用验证码,现在创建了数百个垃圾邮件帐户。默认情况下,用户的超级管理面板一次仅显示15个用户。我需要删除几百个用户,一页一页地浏览这个页面很单调。是否有可以帮助批量删除用户的插件?我希望能够一次选择和删除几百个用户(或者更好地通过用户名进行regex搜索)。谢谢