Users.php“DELETE USER”批量编辑屏幕中的过滤器下拉菜单

时间:2019-01-21 作者:Steck Insights Web Design

我最近尝试删除管理员用户。使用批量编辑器,我选择了“删除”,并提供了将其内容分配给其他用户的选项。但是,下拉列表包含数千个用户(订阅者、客户等),因此很难找到我想要重新分配内容的正确管理用户。

作为一种解决方法,我编辑了用户。php直接添加\'role\' => \'administrator\', 到wp_下拉列表_users()数组。这完成了我所需要的,但我想以正确的方式永久性地自定义此下拉列表(custom users.php页面或从functions.php或升级安全方法返回管理员用户的挂钩/过滤器)。

该编辑的完整代码如下(自WP 5.0.3起的第271行):

<ul style="list-style:none;">
  <li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" />
  <?php _e(\'Delete all content.\'); ?></label></li>
  <li><input type="radio" id="delete_option1" name="delete_option" value="reassign" />
  <?php echo \'<label for="delete_option1">\' . __( \'Attribute all content to:\' ) . \'</label> \';
  wp_dropdown_users( array(
    \'name\' => \'reassign_user\',
    \'exclude\' => array_diff( $userids, array( $current_user->ID ) ),
    \'show\' => \'display_name_with_login\',
    \'role\' => \'administrator\',
  ) ); ?></li>
</ul>
打猎之后,我发现了一些关于adding a users pagecustomizing the users dropdown (如果您想在其他地方添加),但我不相信将这两个概念放在一起会覆盖现有用户。php下拉列表(可能只是添加了不同的用户页面)。

您建议如何实现这一点(即在分配内容屏幕上过滤用户下拉列表)?

提前感谢!

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

一种方法是使用load-users.php 仅在wp-admin/users.php 页,然后使用wp_dropdown_users_args 用于修改参数的过滤器(例如role 参数)传递给wp_dropdown_users().

此外,我们检查以确保字段名为reassign_user WordPress在users.php 文件这是为了防止修改同一页面上其他用户下拉列表的参数。

add_action( \'load-users.php\', function(){
    // Make sure the "action" is "delete".
    if ( \'delete\' !== filter_input( INPUT_GET, \'action\' ) ) {
        return;
    }

    add_filter( \'wp_dropdown_users_args\', function( $query_args, $args ){
        if ( \'reassign_user\' === $args[\'name\'] ) {
            $query_args[\'role\'] = \'administrator\';
        }

        return $query_args;
    }, 10, 2 );
} );
您可以检查wp_dropdown_users() source code 查看$query_args$args, 他们的价值观等。