如上图所示,默认情况下会显示本站所有注册用户。但有的时候因为各种原因只想显示满足指定条件的用户。

使用pre_user_query

在functions.php中插入如下代码:

<?php
add_action('pre_user_query', 'hide_59984458');

function hide_59984458($user_query)
{
    if (!current_user_can('administrator')) {
        global $wpdb;
        $ids = array();
        $results = $wpdb->get_results("SELECT user_id FROM `$wpdb->usermeta` WHERE `meta_key`='staff_department' AND `meta_value` LIKE '%itsolution%' ");
        foreach ($results as $r) {
            $ids[] = $r->user_id;
        }
        $ids = implode(',', $ids);
        $user_query->query_where = str_replace(
            'WHERE 1=1',
            'WHERE 1=1 AND ID IN (' . $ids . ')',
            $user_query->query_where);
    }
}
?>

这段代码的作用是,wordpress在后台生成用户列表之前对用户列表进行一定的预处理。对数据库查询条件做一些调整。

代码提示:

上述代码中所示,每个用户都有一个属性staff_department(员工所属部门),就当做是用来保存员工的部门。想要查询符合itsolution(IT解决方案部)的用户。