Yanıtlar:
Kullanıcı kimliğini kullanın ve WP_User:
$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );
/**
* Get user roles by user ID.
*
* @param int $id
* @return array
*/
function wpse_58916_user_roles_by_id( $id )
{
$user = new WP_User( $id );
if ( empty ( $user->roles ) or ! is_array( $user->roles ) )
return array ();
$wp_roles = new WP_Roles;
$names = $wp_roles->get_names();
$out = array ();
foreach ( $user->roles as $role )
{
if ( isset ( $names[ $role ] ) )
$out[ $role ] = $names[ $role ];
}
return $out;
}
Kullanım örneği:
print '<pre>'
. htmlspecialchars(
print_r( wpse_58916_user_roles_by_id(1), TRUE )
)
. '</pre>';
Array
(
[administrator] => Administrator
)
Bir nesne bp_membersdizisi döndürürse WP_User, her biri roleskullanıcı rollerinin bir dizisini içeren bir özelliğe sahip olmalıdır .
Aksi takdirde, bir çift çifti döndürecek olan get_user_metaanahtar için kullanabilirsiniz :wp_capabilitiesrole => capability
<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);
$user->IDbireyin rolünü. Sistemimizde hiçbir kullanıcı olarak yalnızca bir role 1'den fazla rol atanır.
$roles[0], bitti.
Anladığım kadarıyla, muhtemelen yıllar içinde değişti, şimdi değil 'wp_capabilities'. Temel WP dosyalarına, şimdi nasıl yaptıklarına baktım ve buna yeni bir çözüm buldum. İşte şimdi kullandığım kod:
global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );
$cap sonra ilişkilendirilebilir bir dizi olarak gelir, örneğin:
{
"administrator": true
}
veya
{
"subscriber": true
}
Yani sizin durumunuzda muhtemelen dizinin anahtarlarını almalısınız:
$caps_array = array_keys( $cap );
ve sonra her şeyi ondan alın. Kullanıcının yönetici rolü olup olmadığını görmek gerekiyordu, bu yüzden kontrol ettim:
if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }
Tüm WP_Usernesne değil, bir kullanıcı kimliğim vardı ve usernesneyi yaratacak herhangi bir çözüm kullanmak istemedim . Ben kontrol gibi, get_user_metabu tam parametre kontrol etmek için doğrudan db gider, bu yüzden bu en hızlı ve kaynak açısından yol olmalıdır.