使用WP_LIST_TABLE的管理页面的批量操作挂钩

时间:2015-07-14 作者:Codeformer

我有一个管理页面,我使用add_submenu_page 函数,该函数使用WP\\u List\\u Table类列出一些自定义数据。我在get\\u bulk\\u actions中定义了bulk actions选项,它显示在下拉列表中。但当用户提交表单时,将触发哪个钩子。

我试着跟踪,但没有成功

add_action( \'admin_action_YOUR_ACTION\', \'your_bulk_action_handler_function\' );

现在为了让它工作,我在“admin\\u init”中定义了一个钩子函数,并正在检查if(isset($_POST[\'action\']) && $_POST[\'action\'] == \'export_action\' ) { //Export code here. }

但是有没有更好的方法呢?

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

您必须使用如下“process\\u bulk\\u action”功能:

public function process_bulk_action() {

   //nonce validations,etc

    $action = $this->current_action();

    switch ( $action ) {

        case \'export_action\':

            // Do whatever you want
            wp_redirect( esc_url( add_query_arg() ) );
            break;

        default:
             // do nothing or something else
            return;
            break;
        }

        return;

    }
}
如果您需要完整的示例,这是我用于插件的代码:

   public function process_bulk_action() {

        if ( isset( $_POST[\'_wpnonce\'] ) && ! empty( $_POST[\'_wpnonce\'] ) ) {
            echo \'<pre>\';
            print_r($_POST);
            echo \'</pre>\';

            $nonce  = filter_input( INPUT_POST, \'_wpnonce\', FILTER_SANITIZE_STRING );
            $action = \'bulk-\' . $this->_args[\'plural\'];

            if ( ! wp_verify_nonce( $nonce, $action ) )
                wp_die( \'Nope! Security check failed!\' );

        }

        $action = $this->current_action();

        switch ( $action ) {

            case \'delete\':
                self::delete_activity( absint( $_GET[\'activity\'] ) );

                wp_redirect( esc_url( add_query_arg() ) );

                break;

            case \'bulk-delete\':
                $ids = esc_sql( $_POST[\'bulk-selected\'] );
                foreach ( $ids as $id ) {
                    self::delete_activity( $id );
                }

                wp_redirect( esc_url( add_query_arg() ) );

                break;

            case \'bulk-export\':
                $ids = esc_sql( $_POST[\'bulk-selected\'] );

                self::export_activities( $ids );

                wp_redirect( esc_url( add_query_arg() ) );
                break;

            default:
                // do nothing or something else
                return;
                break;
        }

        return;

    }
我希望这对您有所帮助;)

结束

相关推荐

Hooks for Links Box

Possible Duplicate:Getting archive pages in WP's AJAX internal link finder? 新的有挂钩吗internal links box 创建于WP 3.1? 我正在尝试在插件中修改它。