Kullanıcının rolü nasıl alınır?


15

Bir kullanıcı ile ilişkili rolü almam gerekiyor - "şu anda oturum açmış kullanıcı" değil.

Buddypress kullanıyorum (bu sorunun doğası için önemli değil) ve bp_members()döngüde bulunuyorum.

Raporladığım kullanıcının rolünü herhangi bir zamanda nasıl alabilirim?

Teşekkürler.

Yanıtlar:


17

Kullanıcı kimliğini kullanın ve WP_User:

$user = new WP_User( $user_id );
print wp_sprintf_l( '%l', $user->roles );

Güncelleme

/**
 * 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
)

Teşekkürler @toscho - bana ne bekliyordum gibi görünmüyordu. Bir editörüm, boş / boş bir değer ve bbp_participant aldım. Yönetici, Editör, Yazar veya Abone görmeyi bekliyordum çünkü bunlar sadece kullandığımız roller.
frank13

@ frank13 Güncellememe bakın.
fuxia

2
Teşekkürler @toscho ... Bu daha kolay kullanılabilir olacağını düşünürdüm bir veri değeri elde etmek için kod bir sürü.
frank13

Çok faydalı, teşekkürler! Çok üzücü ve kafa karıştırıcı, neden kullanıcının rolüne daha doğrudan erişemiyorsunuz? "Can kullanıcısı" işlevi çoğu insanın istediklerinin tersini işler.
Mike

7

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);

$ roles bir dizi haline gelir. Ben almak için arıyorum $user->IDbireyin rolünü. Sistemimizde hiçbir kullanıcı olarak yalnızca bir role 1'den fazla rol atanır.
frank13

$roles[0], bitti.
chrisguitarguy

Tamam, teşekkürler @ChristopherDavis ... $ roles [0] listedeki her kullanıcı için tahtada "0" döndürür
frank13

@chrisguitarguy $ roles [0] hala çalışıyor mu?
T.Todua

0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.