限制wordpress用户仅编辑具有相同元键值的用户

限制wordpress用户仅编辑具有相同元键值的用户,wordpress,admin,user-roles,Wordpress,Admin,User Roles,我有一个wordpress网站设置,里面有一个主管理员,然后我有用户角色管理器来更改订户角色,以便能够添加新用户。然后,我成功地将订户限制为仅使用我创建的新角色“player”创建新用户 然后,我为每个用户添加了一个名为“game”的自定义字段。订阅者只能更改其和“玩家”自定义字段。玩家无法更改此值 当用户登录时,我需要更改“所有用户”页面,以仅显示具有“游戏”相同cutom字段值的用户列表 我尝试过各种不同的插件,也尝试过我自己在修改代码方面的尝试,但没有任何效果:( 谢谢你的帮助 安迪从这个

我有一个wordpress网站设置,里面有一个主管理员,然后我有用户角色管理器来更改订户角色,以便能够添加新用户。然后,我成功地将订户限制为仅使用我创建的新角色“player”创建新用户

然后,我为每个用户添加了一个名为“game”的自定义字段。订阅者只能更改其和“玩家”自定义字段。玩家无法更改此值

当用户登录时,我需要更改“所有用户”页面,以仅显示具有“游戏”相同cutom字段值的用户列表

我尝试过各种不同的插件,也尝试过我自己在修改代码方面的尝试,但没有任何效果:(

谢谢你的帮助


安迪从这个问答中得到了代码

您需要对其进行一些调整,以适应您的角色和功能,很可能会更改
meta_键
meta_值
值。我添加了
$pagenow
的检查,以确保这只会在
/wp admin/users.php
中触发

add_action( 'pre_user_query', 'filter_users_wpse_10742' );

function filter_users_wpse_10742( $user_search ) 
{
    global $pagenow;
    if( 'users.php' != $pagenow)
        return;

    $user = wp_get_current_user();

    if ( $user->roles[0] != 'administrator' ) 
    { 
        global $wpdb;

        $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}user_level' 
                    AND {$wpdb->usermeta}.meta_value != 10)", 
            $user_search->query_where
        );
    }
}

就我所知,它作为“pre_user_update”是如何工作的?它不是一个wordpress函数,它没有列在pre_user_查询如何调用中?ah iv发现了一些新列表,忽略最后一个问题。感谢帮助:)