WordPress-Fähigkeiten und current_user_can() in functions.php

Lesezeit: 3 Minuten

Ich habe eine Funktion zu functions.php hinzugefügt, um Benutzer nach der Anmeldung zu posts-new.php umzuleiten, und es funktioniert. Ich möchte jedoch nur, dass dies geschieht, wenn der Benutzer, der sich anmeldet, ein Mitwirkender ist. Also habe ich folgendes hinzugefügt:

/** Redirect after login */
    function mysite_login_redirect(){
        if ( current_user_can( 'manage_options' ) ) {
           return 'http://mysite.com/wp-admin/index.php';}
        else {
           return 'http://mysite.com/wp-admin/post-new.php';}
    }
add_action( 'login_redirect', 'mysite_login_redirect');

In diesem Zustand werden sowohl Mitwirkende als auch Administratoren zu post-new.php umgeleitet. Um es zu testen, habe ich die Funktion so modifiziert, dass Benutzer ohne die Fähigkeit umgeleitet werden:

if ( !current_user_can( 'ma ...

Wenn ich die Funktion geändert habe, werden sowohl Mitwirkende als auch Administratoren zu index.php umgeleitet.

Die Funktion scheint also zu funktionieren, aber dies impliziert für mich, dass die Funktion „manage_options“ für Administratoren nicht angezeigt wird. Ich habe mehrere admin-exklusive Funktionen mit den gleichen Ergebnissen ausprobiert. Seltsam oder?

Ich sollte sagen, dass ich das Benutzerrollen-Editor-Plugin verwende, es jedoch deaktiviert und die Funktionen mit denselben Ergebnissen getestet habe.

Ich verwende auch die Active Directory-Integration und den Admin-Menü-Editor.

Versuche dies:

if( current_user_can( 'administrator' ) ){} // only if administrator
if( current_user_can( 'editor' ) ){} // only if editor
if( current_user_can( 'author' ) ){} // only if author
if( current_user_can( 'contributor' ) ){} // only if contributor
if( current_user_can( 'subscriber' ) ){} // only if subscriber

Oder:

if( current_user_can( 'level_10' ) ){}
if( current_user_can( 'level_9' ) ){}
if( current_user_can( 'level_8' ) ){}
if( current_user_can( 'level_7' ) ){}
if( current_user_can( 'level_6' ) ){}
if( current_user_can( 'level_5' ) ){}
if( current_user_can( 'level_4' ) ){}
if( current_user_can( 'level_3' ) ){}
if( current_user_can( 'level_2' ) ){}
if( current_user_can( 'level_1' ) ){}
if( current_user_can( 'level_0' ) ){}

  • Ich habe versucht, „Administrator“ anstelle von „manage_options“ zu verwenden, aber ich erhalte die gleichen Ergebnisse. Wenn ich das richtig verstehe, gilt das Tag current_user_can() nur für Fähigkeiten und nicht für Benutzerrollen.

    – Es ist George

    15. November 2012 um 20:17 Uhr

  • Sein Argument ist entweder eine Fähigkeit oder ein Rollenname, also sollte es funktionieren (codex.wordpress.org/Function_Reference/current_user_can).

    – CE

    15. November 2012 um 22:42 Uhr

  • So oder so funktioniert die Funktion nicht und das Problem ist, dass weder Rollen noch Fähigkeiten von der Funktion richtig erkannt werden. Wenn ich es auf eine administratorspezifische Rolle oder nur auf „Administrator“ einstelle, sollte es die „if“-URL verwenden, wenn ich mich als Administrator anmelde, und die „else“-URL, wenn ich mich als Mitwirkender anmelde. Unabhängig davon, ob ich die Funktion auf „current_user_can“ oder „!current_user_can“ setze, verhalten sich das Administrator-Login und das Contributor-Login genauso, als ob die Fähigkeiten nicht unterschiedlich wären.

    – Es ist George

    16. November 2012 um 3:13 Uhr

  • Zitat aus der Funktionsdefinition: Obwohl die Prüfung gegen bestimmte Rollen anstelle einer Fähigkeit teilweise unterstützt wird, wird von dieser Praxis abgeraten, da sie zu unzuverlässigen Ergebnissen führen kann.

    – Shivanand Sharma

    21. Oktober 2019 um 11:32 Uhr

Versuche dies:

$exclude_role="contributor";
        $roles = get_role( $exclude_role )->capabilities;
        foreach ( $roles as $cap ) {
            if ( current_user_can( $cap ) ) {
                ...
            }
        }

1392120cookie-checkWordPress-Fähigkeiten und current_user_can() in functions.php

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

Privacy policy