WordPress: Benutzer mit benutzerdefinierter Rolle können nicht auf wp-admin zugreifen

Lesezeit: 3 Minuten

Zunächst einmal bin ich ein WordPress-Lerner. Tut mir leid, wenn mein Code dumm aussieht!

Ich habe ein benutzerdefiniertes Design mit einer benutzerdefinierten Benutzerrolle erstellt. Ich entwickle kein Plugin.

In meiner Datei fucntions.php habe ich den folgenden Code geschrieben, um eine Benutzerrolle zu erstellen. Benutzer, denen diese Rolle zugewiesen ist, sollen sich beim Administrator anmelden, aber nur auf ihre Profilseiten zugreifen können.

add_action('init', 'yrc_cst_register_role_customer_service_rep');

/**
 * Register new user role
 */

function yrc_cst_register_role_customer_service_rep() {

    $wp_roles = new WP_Roles();

    $wp_roles->remove_role('subscriber');
    $wp_roles->remove_role('editor');
    $wp_roles->remove_role('contributor');
    $wp_roles->remove_role('author');

    $service_rep_caps = array(
        'read'              => false,
        'create_posts'      => false,
        'edit_posts'        => false,
        'edit_others_posts' => false,
        'publish_posts'     => false,
        'manage_categories' => false,
        'manage_options'    => false,
    );

    add_role('customer_service', __('Customer Service'), $service_rep_caps);
}

Ich habe alle Rollen außer Administrator entfernt, da für dieses Portal keine andere Rolle erforderlich ist. Der Administrator erstellt nur Benutzer mit Kundendienst Rolle.

Ich habe kein Drittanbieter-Plugin im System installiert.

Benutzer mit der benutzerdefinierten Rolle können sich über eine benutzerdefinierte Anmeldeseite beim System anmelden, die einwandfrei funktioniert. Aber immer wenn sie versuchen, auf ihre Profilseite zuzugreifen, kommt die folgende Fehlermeldung:

Entschuldigung, Sie sind nicht berechtigt, auf diese Seite zuzugreifen.

Gibt es sowas 'edit_profile' => true?

Ich muss etwas falsch machen, aber mein begrenztes Wissen reicht nicht aus, um das herauszufinden. Jeder Vorschlag wäre sehr willkommen.

  • Ich denke, er braucht ‘lesen’ => wahr

    – Ständer

    16. November 2017 um 7:17 Uhr

  • aber andererseits – ein Abonnent darf standardmäßig nur auf seine Profilseite zugreifen, richtig?

    – Ständer

    16. November 2017 um 7:18 Uhr

  • yeah – die Rolle sollte nur ‘read’ haben

    – Ständer

    16. November 2017 um 7:20 Uhr

  • In diesem Fall muss ich hinzufügen 'capabilities' => 'subscriber'? Wechseln zu 'read' => true macht keinen unterschied. Was ist auch für eine benutzerdefinierte Rolle der richtige Weg, um die Funktion so zu definieren, dass er nur auf seine Profilseite zugreifen kann?

    – Subrata Sarkar

    16. November 2017 um 7:20 Uhr

  • Schau dir das an : codex.wordpress.org/Roles_and_Capabilities#Subscriber

    – Ständer

    16. November 2017 um 7:22 Uhr

Benutzer-Avatar
Ständer

Du kannst es vielleicht so machen:

Dies sollte die Funktionen der Abonnentenrolle klonen und Ihre Rolle dafür erstellen.

add_action('init', 'CreatecloneRoleSubscriber');

function CreatecloneRoleSubscriber()
{
    global $wp_roles;
    if ( ! isset( $wp_roles ) )
        $wp_roles = new WP_Roles();

    $sub = $wp_roles->get_role('Subscriber');
    //Adding a 'new_role' with all subscriber caps
    $wp_roles->add_role('customer_service', 'Customer Service', $sub->capabilities);
}

BEARBEITEN: Diskussion in Fragekommentaren lesen

  • Klon – Tolle Sache!

    – Subrata Sarkar

    16. November 2017 um 7:39 Uhr

  • Das hat bei mir funktioniert! Aber ich musste hinzufügen remove_role() zuerst und wenden Sie die Rolle erneut auf den Benutzer an. Andernfalls werden die Funktionen nicht aktualisiert.

    – Skatox

    23. November 2018 um 4:35 Uhr

  • @Skatox Also hast du die Abonnentenrolle entfernt?

    – Ständer

    23. November 2018 um 11:18 Uhr


  • @Stender Nein, ich habe customer_service (meine eigene Rolle) entfernt, um Änderungen zu aktualisieren.

    – Skatox

    23. November 2018 um 13:23 Uhr

Ändern Sie in Ihrem Fall einfach die manage_options auf true. Beachten Sie jedoch, dass diese Benutzer auch Zugriff auf andere Teile des Dashboards haben, wenn Sie manage_options auf true setzen

 $service_rep_caps = array(
    'read'              => false,
    'create_posts'      => false,
    'edit_posts'        => false,
    'edit_others_posts' => false,
    'publish_posts'     => false,
    'manage_categories' => false,
    'manage_options'    => true, // Most plugins and pages check for manage_options for checking access level to allow access to pages and settings.
);

  • Richtig, aber laut Anforderung ist das für einen Benutzer mit dieser Rolle nicht erlaubt

    – Subrata Sarkar

    16. November 2017 um 7:23 Uhr

Benutzer-Avatar
Juan

Ich habe gerade diese Lösung gefunden, die ich für wirklich sauber halte, um wp-admin mit einer neuen Rolle einzugeben:

Zugriffsbegrenzung zum Backend hinzufügen

Fügen Sie die Kappe hinzu view_admin_dashboard & read zu deiner neuen Rolle.

Zeigen Sie die Admin-Leiste an

Fügen Sie diese Funktion zu Ihrer WordPress hinzu.

# functions.php

add_filter( 'show_admin_bar', function () {

    if ( current_user_can( 'view_admin_dashboard' ) )
        return true;
    
    return false;

}, 10);

1134960cookie-checkWordPress: Benutzer mit benutzerdefinierter Rolle können nicht auf wp-admin zugreifen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy