Lấy danh sách các vai trò hiện có trên trang web WordPress?


38

Khi viết các plugin WordPress thường cần phải thiết lập các tùy chọn cho vai trò nào trên trang web có quyền truy cập vào chức năng hoặc nội dung nhất định. Để làm điều này, một nhà phát triển plugin cần tìm nạp danh sách các vai trò tồn tại trên trang web để sử dụng trong tùy chọn. Vì vai trò tùy chỉnh có thể được tạo nên chúng tôi không thể giả sử vai trò mặc định là vai trò duy nhất khả dụng.

Cách tốt nhất để lấy danh sách là gì?


6
Lưu ý: Câu hỏi này ban đầu được Ryan Bilesky hỏi trong danh sách gửi thư của wp-hacker và được tôi trả lời. Tôi đã thêm nó ở đây vì đây là một trường hợp rõ ràng về câu hỏi thực hành tốt nhất mà mọi người có thể hỏi google :)
jerclarke

1
Hey @ Jeremy Clarke - Thật vui mừng khi có sự tham gia của bạn ở đây và đây là chính xác các loại điều chúng tôi đang tìm kiếm ở đây; câu trả lời liên quan đến các câu hỏi phổ biến cũng có thể tiết lộ thực tiễn tốt nhất. Thanh danh!
MikeSchinkel

Câu trả lời:


47

Vai trò được lưu trữ trong biến toàn cầu $wp_roles.

Chức năng lý tưởng làget_editable_roles() từ/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;
}

Phần "có thể chỉnh sửa" là vì nó cung cấp cho các plugin khác cơ hội lọc danh sách trong trường hợp ai đó không phải là quản trị viên có 'edit_users'đặc quyền (và do đó, 'quản trị viên' cần phải được xóa khỏi danh sách, người dùng khác có thể tự tạo quản trị viên). Các plugin quản lý vai trò được sử dụng để tạo các vai trò tùy chỉnh là các plugin sẽ sử dụng bộ lọc đó. Mặt khác, chức năng này là cơ bản get_roles() (không tồn tại) .

Có lẽ plugin của bạn sẽ chỉ cung cấp trang cài đặt được đề cập cho người có khả năng cấp quản trị viên 'manage_options'và về cơ bản là quản trị viên có quyền truy cập vào tất cả các vai trò, vì vậy bộ lọc không ảnh hưởng đến bạn.

Ngoài ra cònwp_dropdown_roles() có vai trò là <option>các trường trong <select>danh sách (mặc dù các hộp kiểm có khả năng hoạt động tốt hơn trong nhiều tình huống khi bạn chọn ai có quyền truy cập vào nội dung nào đó) .


3
Lưu ý: Tôi đã tạo chức năng này như một phần của bản vá để giúp WP an toàn hơn, vì vậy tôi thiên vị về lợi ích của nó;)
jerclarke

14

Thử đi:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS heh, bỏ lỡ lời giải thích và trả lời, quá nhanh tôi :)


0

Dưới đây là cách bạn có thể tìm thấy danh sách vai trò mà không cần bất kỳ plugin hoặc chức năng nào http://screencast.com/t/uaWsGLAR3Sh


6
Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Gabriel

0

Đối với những người có trang web đa ngôn ngữ, chức năng

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

trả về mảng cục bộ như thế này (tên vai trò bằng ngôn ngữ tiếng Slovak):

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

Đây là cách để có được một mảng của tất cả các vai trò người dùng hiện có và các khả năng cho từng vai trò, trong WordPress. Nếu bạn không muốn in nó ra màn hình, hãy bỏ qua dòng cuối cùng. Biến $ vai trò trên dòng 2 sẽ giữ mảng người dùng và khả năng để bạn có thể sử dụng nó theo cách bạn cần. Xem bên dưới để biết ví dụ về mảng trả về.

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

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.