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.