วิธีรับบทบาทของผู้ใช้


15

ฉันต้องได้รับบทบาทที่เกี่ยวข้องกับผู้ใช้ - ไม่ใช่ "ผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน"

ฉันกำลังใช้ Buddypress (ไม่ใช่ว่าควรจะเป็นไปตามลักษณะของคำถามนี้) และฉันอยู่ในbp_members()วง

ฉันจะเรียกคืนบทบาทของผู้ใช้ที่ฉันกำลังรายงานในลูปในเวลาที่กำหนดได้อย่างไร?

ขอบคุณ

คำตอบ:


17

ใช้ ID ผู้ใช้และ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;
}

ตัวอย่างการใช้งาน:

print '<pre>' 
    . htmlspecialchars( 
        print_r( wpse_58916_user_roles_by_id(1), TRUE ) 
        ) 
    . '</pre>';

Array
(
    [administrator] => Administrator
)

ขอบคุณ @toscho - ดูเหมือนจะไม่ได้รับสิ่งที่ฉันคาดหวัง ฉันได้รับตัวแก้ไขค่าว่าง / null และ bbp_participant ฉันคาดหวังว่าจะเห็นผู้ดูแลระบบแก้ไขผู้แต่งหรือผู้สมัครสมาชิกเนื่องจากเป็นบทบาทเดียวที่เราใช้
frank13

@ frank13 ดูการอัปเดตของฉัน
fuxia

2
ขอบคุณ @toscho ... นั่นเป็นรหัสจำนวนมากที่จะได้รับค่าข้อมูลที่ฉันคิดว่าน่าจะมีให้ใช้มากขึ้น
frank13

มีประโยชน์มากขอบคุณ! เศร้าและสับสนทำไมคุณไม่สามารถเข้าถึงบทบาทของผู้ใช้โดยตรง ฟังก์ชัน "ผู้ใช้สามารถ" ทำหน้าที่ตรงข้ามกับสิ่งที่คนส่วนใหญ่ต้องการ
Mike

7

หากbp_membersส่งคืนอาร์เรย์ของWP_Userวัตถุแต่ละรายการควรมีคุณสมบัติrolesที่มีอาร์เรย์ของบทบาทผู้ใช้

มิฉะนั้นคุณสามารถใช้get_user_metaสำหรับคีย์wp_capabilitiesซึ่งจะส่งกลับอาร์เรย์ของrole => capabilityคู่:

<?php
$caps = get_user_meta($user->ID, 'wp_capabilities', true);
$roles = array_keys((array)$caps);

บทบาท $ จบลงด้วยการเป็นอาร์เรย์ ฉันกำลังมองหา$user->IDบทบาทของ บทบาทเดียวเท่านั้นเนื่องจากไม่มีผู้ใช้ในระบบของเราที่ได้รับมอบหมายมากกว่า 1 บทบาท
frank13

$roles[0]เสร็จแล้ว
chrisguitarguy

ตกลงขอบคุณ @ChristopherDavis ... $ role [0] ส่งคืน "0" ทั่วกระดานสำหรับผู้ใช้ทุกคนในรายการ
frank13

@chrisguitarguy $ role [0] ยังทำงานหรือไม่
T.Todua

0

อย่างที่ฉันเข้าใจมันอาจเปลี่ยนไปในช่วงหลายปีที่ผ่านมาตอนนี้ไม่ใช่'wp_capabilities'เลย ฉันดูที่ไฟล์ WP หลักวิธีที่พวกเขาทำตอนนี้และพบทางออกใหม่ให้กับสิ่งนี้ นี่คือรหัสที่ฉันใช้ตอนนี้:

global $wpdb;
$cap = get_user_meta( $wp_user_id, $wpdb->get_blog_prefix() . 'capabilities', true );

$cap จากนั้นมาเป็นอาร์เรย์ที่เชื่อมโยงตัวอย่างเช่น:

{
    "administrator": true
}

หรือ

{
    "subscriber": true
}

ดังนั้นในกรณีของคุณคุณควรจะได้รับกุญแจของอาร์เรย์:

$caps_array = array_keys( $cap );

แล้วรับทุกอย่างจากมัน ฉันต้องการดูว่าผู้ใช้มีบทบาทผู้ดูแลระบบหรือไม่ดังนั้นฉันจึงตรวจสอบ:

if ( is_array( $cap ) && !empty( $cap['administrator'] ) ) { return true; }

ฉันมี ID ผู้ใช้ไม่ใช่WP_Userวัตถุทั้งหมดและฉันไม่ต้องการใช้โซลูชันใด ๆ ที่จะสร้างuserวัตถุ ขณะที่ฉันตรวจสอบให้get_user_metaไปที่ db เพื่อตรวจสอบพารามิเตอร์ที่แน่นอนนี้ดังนั้นจึงควรเป็นเส้นทางที่เร็วและฉลาดที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.