从用户列表中隐藏除当前用户之外的管理员(管理员)

时间:2014-12-30 作者:need-help

此代码非常有效!问题是,这段代码还隐藏了当前用户(如果是管理员),因此我试图隐藏除当前用户之外的所有管理员。

我需要帮助来编辑sql,以便使用“$user\\u ID”进行此操作

function isa_pre_user_query($user_search) {
  $user = wp_get_current_user();
  //if (!current_user_can(\'administrator\')) { // Is Not Administrator - Remove Administrator
    global $wpdb;
    $user_ID = get_current_user_id();
    $user_search->query_where = 
        str_replace(\'WHERE 1=1\', 
            "WHERE 1=1 AND {$wpdb->users}.ID IN (
                 SELECT {$wpdb->usermeta}.user_id FROM $wpdb->usermeta 
                    WHERE {$wpdb->usermeta}.meta_key = \'{$wpdb->prefix}capabilities\'
                    AND {$wpdb->usermeta}.meta_value NOT LIKE \'%administrator%\')", 
            $user_search->query_where
        );
  //}
}
add_action(\'pre_user_query\',\'isa_pre_user_query\');

1 个回复
SO网友:Jan Beck

引用自WordPress VIP Development Best Practices:

请记住,数据库不是工具箱。虽然您可能能够在数据库方面执行大量工作,但通过保持数据库查询简单并在PHP中执行必要的计算和逻辑,您的代码可以更好地扩展。

也就是说,如果当前用户具有管理功能,您可以尝试获取所有非管理用户,然后将其添加到结果中。

您可以使用更高级的WordPress功能轻松实现这一点:

    <?php
    /* get all non-admin users */
    $args = array( 
        \'meta_key\'     => \'wp_capabilities\', 
        \'meta_value\'   => \'Administrator\', /* you better check for a capability, not a role */
        \'meta_compare\' => \'NOT LIKE\'
    );
    $user_query = new WP_User_Query( $args );

    /* if current user is admin, get its user object */
    $current_admin_user = current_user_can( \'activate_plugins\' ) ? wp_get_current_user() : null;

    /* merge non-admin users with current admin-user */
    $results = $user_query->get_results();
    $results[] = $current_admin_user;

    /* update the user query */
    $user_query->__set( \'results\', $results );
    $user_query->__set( \'total_users\', count( $results ));

    /* do whatever you want */
    print_r($user_query);

结束