我最近尝试删除管理员用户。使用批量编辑器,我选择了“删除”,并提供了将其内容分配给其他用户的选项。但是,下拉列表包含数千个用户(订阅者、客户等),因此很难找到我想要重新分配内容的正确管理用户。
作为一种解决方法,我编辑了用户。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 page 或
customizing the users dropdown (如果您想在其他地方添加),但我不相信将这两个概念放在一起会覆盖现有用户。php下拉列表(可能只是添加了不同的用户页面)。
您建议如何实现这一点(即在分配内容屏幕上过滤用户下拉列表)?
提前感谢!
最合适的回答,由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
, 他们的价值观等。