我正在开发一个插件,我必须将用户列入黑名单,因此我需要在“用户”页面的“批量操作”下拉列表中的“删除”选项之后再显示一个名为“黑名单”的下拉项目。但我无法看出这两个操作的来源以及如何将特定用户列入黑名单。
我的想法是在用户表中添加一个字段is_blacklisted 作为具有默认值的布尔值,当应用黑名单 操作时它会更改为 。还有其他想法吗?falsetrue
有一个过滤器,但它仅用于删除批量操作。
从这个 WPSE 问题、答案和评论中,有以下解决方法:使用 jQuery 将自定义选项添加到下拉列表中,并挂钩admin_action_$your-action以捕获提交。
该钩子admin_footer-$current_page用于在特定管理页面上打印我们的 JavaScript(调整以在其他屏幕中使用)。
add_action( 'admin_footer-users.php', 'bulk_footer_so_23541269' );
add_action( 'admin_action_black_list', 'bulk_request_so_23541269' );
function bulk_footer_so_23541269()
{
# global $typenow; if( $typenow != 'page' ) return; // if used on edit.php screen
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('<option>').val('black_list').text('Black list')
.appendTo("select[name='action'], select[name='action2']");
});
</script>
<?php
}
function bulk_request_so_23541269()
{
# Array with the selected User IDs
wp_die( '<pre>' . print_r( $_REQUEST['users'], true ) . '</pre>' );
// $_REQUEST['post'] if used on edit.php screen
}
Run Code Online (Sandbox Code Playgroud)
您对阻止用户的怀疑值得另一个问题,但我首先在这里开始一项研究。
适当的支持add_filter( \'bulk_actions-screenid\', \'register_my_bulk_actions\' )。
引用公告帖子:
\n\n要在批量操作下拉 HTML 元素中添加选项,请在bulk_actions-{screen_id}过滤器上注册一个回调,将新选项添加到数组中。代替{screen_id}为管理屏幕的 ID 以提供批量操作。
要添加批量操作 \xe2\x80\x9cEmail 给 Eric,\xe2\x80\x9d,我们可以使用以下代码:
\n\nadd_filter( \'bulk_actions-edit-post\', \'register_my_bulk_actions\' );\n\nfunction register_my_bulk_actions($bulk_actions) \n{\n $bulk_actions[\'email_to_eric\'] = __( \'Email to Eric\', \'email_to_eric\');\n return $bulk_actions;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n要处理批量操作表单提交,请在handle_bulk_actions-{screen_id}相应屏幕的过滤器上注册回调。过滤器期望重定向 URL 被修改,因此请务必修改传递的$redirect_url. 这允许我们将成功或失败状态携带到下一个请求中,以向用户显示通知。其他回调参数将根据此处的屏幕而有所不同,以包含上下文相关的数据。
要添加批量操作处理程序以通过电子邮件发送所选帖子,我们可以使用以下代码:
\n\nadd_filter( \'handle_bulk_actions-edit-post\', \'my_bulk_action_handler\', 10, 3 );\n\nfunction my_bulk_action_handler( $redirect_to, $doaction, $post_ids ) \n{\n if ( $doaction !== \'email_to_eric\' ) {\n return $redirect_to;\n }\n foreach ( $post_ids as $post_id ) {\n // Perform action for each post.\n }\n $redirect_to = add_query_arg( \'bulk_emailed_posts\', count( $post_ids ), $redirect_to );\n return $redirect_to;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n显示通知:我们可以使用现有的通知挂钩让用户知道发生了什么,具体取决于我们在 URL 中设置的状态:
\n\nadd_action( \'admin_notices\', \'my_bulk_action_admin_notice\' );\n\nfunction my_bulk_action_admin_notice() \n{\n if ( ! empty( $_REQUEST[\'bulk_emailed_posts\'] ) ) {\n $emailed_count = intval( $_REQUEST[\'bulk_emailed_posts\'] );\n printf( \'<div id="message" class="updated fade">\' .\n _n( \'Emailed %s post to Eric.\',\n \'Emailed %s posts to Eric.\',\n $emailed_count,\n \'email_to_eric\'\n ) . \'</div>\', $emailed_count );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
9050 次 |
| 最近记录: |