WordPress Sitesinde Şu Anda Kullanılabilir Rollerin Listesini Alma?


38

WordPress eklentilerini yazarken, genellikle sitedeki rollerin belirli işlevlere veya içeriğe erişimi olan seçenekleri ayarlama ihtiyacı vardır. Bunu yapmak için, bir eklentinin geliştirilebilmesi için sitede bulunan rollerin listesini getirmesi gerekir. Özel roller oluşturulabildiğinden, yalnızca varsayılan rollerin kullanılabilir olduğunu varsayamıyoruz.

Listeyi almak için en iyi yol nedir?


6
Not: Bu soru aslen Ryan Bilesky tarafından wp hacker'ların posta listesinde soruldu ve bana cevap verdi. Buraya ekledim, çünkü insanların google'a sorabilecekleri en iyi uygulama sorusunun net bir örneği :)
jerclarke

1
Hey @ Jeremy Clarke - Buraya katılımınız için gerçekten çok sevindik ve bunlar tam da burada aradığımız şeyler; En iyi uygulamaları ortaya çıkarabilecek ortak sorulara ilişkin cevaplar. Kudos!
MikeSchinkel

Yanıtlar:


47

Roller genel değişkende saklanır $wp_roles.

İdeal fonksiyonudurget_editable_roles() dan/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;
}

"Düzenlenebilir" diğer eklentileri yönetici vardır dışındaki durumda birisi listeye filtre şansı sunuyor çünkü parçasıdır 'edit_users'(kullanıcı kendilerini yönetici yapabilir başka o listeden kaldırılacak ve böylece 'yönetici' ihtiyaçlar) ayrıcalığı. Özel roller oluşturmak için kullanılan rol yönetimi eklentileri bu filtreyi kullanacak olanlardır. Aksi halde bu işlev esasen get_roles() (mevcut değil) .

Muhtemelen eklentiniz, söz konusu ayarlar sayfasını yalnızca yönetici düzeyinde yetenekleri olan 'manage_options've temel olarak tüm rollere erişebilen bir yönetici olan birine sunacaktır , bu nedenle filtre sizi etkilememelidir.

Aynı zamandawp_dropdown_roles() size <option>bir <select>liste alanı olarak rolleri veren de vardır (yine de, onay kutularının bir şeye erişimi olanları seçtiğiniz birçok senaryoda daha iyi çalışması muhtemeldir) .


3
Not: Bu işlevi
WP'yi

14

Bunu dene:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS heh, bu açıklama ve cevap, beni çok hızlı cevapsız :)


0

Herhangi bir eklenti veya işlev olmadan rollerin listesini nasıl bulabilirsiniz? Http://screencast.com/t/uaWsGLAR3Sh


6
Bu bağlantı soruyu cevaplayabilse de, cevabın temel kısımlarını buraya eklemek ve referans için bağlantıyı sağlamak daha iyidir. Bağlantılı sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
Gabriel

0

Çok dilli siteye sahip olanlar için, işlev

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

yerelleştirilmiş diziyi şöyle döndürür (rol adları Slovak dilindedir):

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'te mevcut tüm kullanıcı rollerinin bir dizisini ve her rol için yeteneklerin nasıl elde edileceği budur. Ekrana yazdırmak istemiyorsanız, son satırı atlayın. 2. satırdaki $ roles değişkeni, kullanıcı ve özellik dizisini tutacaktır, böylece kullanmanız gerekir. Döndürülen dizinin bir örneği için aşağıya bakın.

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

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
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.