รับรายชื่อบทบาทที่มีอยู่ในปัจจุบันบนไซต์ WordPress หรือไม่?


38

เมื่อเขียนปลั๊กอิน WordPress มักจะต้องตั้งค่าตัวเลือกสำหรับบทบาทบนไซต์ที่มีการเข้าถึงฟังก์ชันการทำงานหรือเนื้อหาบางอย่าง ในการทำเช่นนี้ปลั๊กอิน dev จำเป็นต้องดึงข้อมูลรายการบทบาทที่มีอยู่บนไซต์เพื่อใช้ในตัวเลือก เนื่องจากสามารถสร้างบทบาทที่กำหนดเองได้เราจึงไม่สามารถถือว่าบทบาทเริ่มต้นเป็นบทบาทที่มีอยู่เท่านั้น

วิธีที่ดีที่สุดในการดึงรายการคืออะไร


6
หมายเหตุ: คำถามนี้ถูกถามครั้งแรกโดย Ryan Bilesky ในรายชื่อผู้รับจดหมาย wp-แฮกเกอร์และตอบโดยฉัน ฉันเพิ่มได้ที่นี่เพราะมันเป็นกรณีที่ชัดเจนของคำถามปฏิบัติที่ดีที่สุดที่คนอาจจะถาม Google :)
jerclarke

1
เฮ้@Jeremy Clarke - ดีใจจริงๆที่มีส่วนร่วมของคุณที่นี่และนี่คือประเภทของสิ่งที่เรากำลังมองหาที่นี่ คำตอบที่เกี่ยวข้องกับคำถามทั่วไปที่สามารถเปิดเผยวิธีปฏิบัติที่ดีที่สุด รุ่งโรจน์!
MikeSchinkel

คำตอบ:


47

$wp_rolesบทบาทจะถูกเก็บไว้ในตัวแปรโลก

ฟังก์ชั่นที่เหมาะคือget_editable_roles()จาก/wp-admin/includes/user.php

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

ส่วน"แก้ไขได้"เป็นเพราะมีปลั๊กอินอื่น ๆ ให้โอกาสในการกรองรายการในกรณีที่คนอื่นที่ไม่ใช่ผู้ดูแลระบบมี'edit_users'สิทธิ์ (และต้องมีการลบ 'ผู้ดูแลระบบ' ออกจากรายการ ปลั๊กอินการจัดการบทบาทที่ใช้ในการสร้างบทบาทที่กำหนดเองนั้นเป็นปลั๊กอินที่จะใช้ตัวกรองนั้น มิฉะนั้นฟังก์ชั่นนี้เป็นหลัก(ซึ่งไม่อยู่)get_roles()

สันนิษฐานว่าปลั๊กอินของคุณจะเสนอเฉพาะหน้าการตั้งค่าที่เป็นปัญหาให้กับบุคคลที่มีความสามารถระดับผู้ดูแลระบบเท่านั้น'manage_options'และเป็นผู้ดูแลระบบที่สามารถเข้าถึงบทบาททั้งหมดได้ดังนั้นตัวกรองจะไม่ส่งผลกระทบต่อคุณ

นอกจากนี้ยังมีwp_dropdown_roles()ที่ช่วยให้คุณมีบทบาทเป็น<option>เขตสำหรับ<select>รายการ(แม้ว่าช่องทำเครื่องหมายมีแนวโน้มที่จะทำงานได้ดีขึ้นในหลายสถานการณ์ที่คุณเลือกที่มีการเข้าถึงบางอย่าง)


3
หมายเหตุ: ฉันสร้างฟังก์ชั่นนี้เป็นส่วนหนึ่งของแพตช์เพื่อให้ WP ปลอดภัยยิ่งขึ้นดังนั้นฉันจึงเอนเอียงไปในทางที่มันชอบ)
jerclarke

14

ลองสิ่งนี้:

function get_role_names() {

global $wp_roles;

if ( ! isset( $wp_roles ) )
    $wp_roles = new WP_Roles();

return $wp_roles->get_names();
}

PS heh พลาดคำอธิบายและตอบกลับเร็วเกินไปฉัน :)


0

นี่คือวิธีที่คุณสามารถค้นหารายการบทบาทโดยไม่มีปลั๊กอินหรือฟังก์ชั่น http://screencast.com/t/uaWsGLAR3Sh


6
แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงนั้นเปลี่ยนแปลง
Gabriel

0

สำหรับผู้ที่มีเว็บไซต์พูดได้หลายภาษาฟังก์ชั่น

function wp_roles_array() {
    $editable_roles = get_editable_roles();
    foreach ($editable_roles as $role => $details) {
        $sub['role'] = esc_attr($role);
        $sub['name'] = translate_user_role($details['name']);
        $roles[] = $sub;
    }
    return $roles;
}

ส่งคืนอาร์เรย์ที่โลคัลไลซ์แล้วเช่นนี้ (ชื่อบทบาทเป็นภาษาสโลวัก):

Array
(
    [0] => Array
        (
            [role] => administrator
            [name] => Administrátor
        )

    [1] => Array
        (
            [role] => editor
            [name] => Editor
        )

    [2] => Array
        (
            [role] => author
            [name] => Autor
        )

    [3] => Array
        (
            [role] => contributor
            [name] => Prispievateľ
        )
)

0

นี่คือวิธีรับอาร์เรย์ของบทบาทผู้ใช้ที่มีอยู่ทั้งหมดและความสามารถของแต่ละบทบาทใน WordPress หากคุณไม่ต้องการพิมพ์ไปที่หน้าจอให้เว้นบรรทัดสุดท้าย ตัวแปร $ role ในบรรทัด 2 จะเก็บอาเรย์ของผู้ใช้และความสามารถเพื่อให้คุณสามารถใช้งานได้ตามที่คุณต้องการ ดูตัวอย่างด้านล่างของอาร์เรย์ที่ส่งคืน

global $wp_roles;
$roles = $wp_roles->roles; 

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.