it-swarm.com.de

Beschränken Sie den Administratorzugriff auf bestimmte Seiten für bestimmte Benutzer

Wie der Titel schon sagt, möchte ich den Back-End-Zugriff auf bestimmte Seiten für bestimmte Benutzer einschränken.

Bei einer Site mit 45-50 Seiten wurde mir klar, dass es eine viel bessere Benutzererfahrung wäre, wenn das Menü "Seite" nur die Seiten auflistet, die der Benutzer ändern/aktualisieren kann.

Ich habe die folgenden Plugins ohne Erfolg ausprobiert. Advanced Access Manager hat die Funktionalität, funktioniert aber nicht/ist fehlerhaft in 3.5.1.

http://wordpress.org/extend/plugins/advanced-access-managerhttp://wordpress.org/extend/plugins/role-scoperhttp://wordpress.org/ extend/plugins/adminimizehttp://wordpress.org/extend/plugins/s2member

Code-Schnipsel in functions.php?

4
BoBoz

Dieser Code scheint für mich gut zu funktionieren (in functions.php):

add_filter( 'parse_query', 'exclude_pages_from_admin' );

$user_id = get_current_user_id();

if ($user_id == 2) {
    function exclude_pages_from_admin($query) {
        global $pagenow,$post_type;
        if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
            $query->query_vars['post__not_in'] = array('123','234','345');
        }
    }
}
5
BoBoz

Ich kann mich nicht dazu äußern, daher füge ich dies als neue Antwort hinzu.

Der Fehler:

Warnung: "call_user_func_array () erwartet, dass Parameter 1 ein gültiger Rückruf ist,> Funktion 'exclude_pages_from_admin' nicht gefunden oder ungültiger Funktionsname".

... liegt daran, dass die Funktion erst aufgerufen wird, nachdem die user_id überprüft wurde. Wenn Sie also NICHT als dieser Benutzer angemeldet sind, ist die Funktion nicht vorhanden, und der Filter gibt diesen Fehler zurück, da er nach der Funktion sucht, sie aber nicht findet.

So sollte es sein:

add_filter( 'parse_query', 'exclude_pages_from_admin' );

function exclude_pages_from_admin($query) {
    $user_id = get_current_user_id();

    if ($user_id == 2) {
    global $pagenow,$post_type;
     if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = array('123','234','345');
     }
    }
}
2
ben_jamin