it-swarm.dev

Získání seznamu aktuálně dostupných rolí na stránkách WordPress?

Při psaní pluginů WordPress je často potřeba nastavit možnosti, pro které role na webu mají přístup k určitým funkcím nebo obsahu. Chcete-li to provést, musí plugin dev načíst seznam rolí, které existují na webu, který má být použit v této možnosti. Protože lze vytvořit vlastní role, nemůžeme předpokládat, že jsou k dispozici pouze výchozí role.

Jaký je nejlepší způsob, jak načíst seznam?

39
jerclarke

Role jsou uloženy v globální proměnné $wp_roles.

Ideální funkce je get_editable_roles()from /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;
}

Část "editovatelné" je proto, že nabízí další pluginy, které umožňují filtrovat seznam v případě, že někdo jiný než admin má oprávnění 'edit_users' (a proto je třeba, aby byl admin ze seznamu odstraněn, jinak by uživatel mohl proveďte sami admin). Zásuvné moduly pro správu rolí používané k vytváření vlastních rolí jsou takové, které by tento filtr používaly. Jinak je tato funkce v podstatě get_roles()(která neexistuje).

Pravděpodobně váš plugin nabídne danou stránku nastavení pouze někomu, kdo má funkce na úrovni administrátora, jako je 'manage_options', a je v podstatě správcem s přístupem ke všem rolím, takže filtr by na vás neměl mít vliv.

Tam je také wp_dropdown_roles()který vám dává role jako <option> pole pro <select> list (ačkoli zaškrtávací políčka budou pravděpodobně fungovat lépe v mnoha scénářích, kde si vyberete, kdo má přístup k něčemu ).

45
jerclarke

Zkuste to:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS heh, vynechal, že vysvětlení a odpověď, příliš rychle mě :)

12
Rarst

Pro ty, kteří mají vícejazyčné stránky, funkce

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

vrací takto lokalizované pole (názvy rolí jsou v slovenském jazyce):

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
Jasom Dotnet

Zde naleznete informace o tom, jak můžete najít seznam rolí bez pluginů nebo funkcí http://screencast.com/t/uaWsGLAR3Sh

0
Manuel Costales