2009-11-26 5 views
8

Ich arbeite an einem Wordpress-basierten Portal, das in einen maßgeschneiderten E-Commerce integriert werden kann. Der E-Commerce dient auch als "Control Panel": Alle Rollen sind dort eingerichtet. Einige Benutzer sind aufgezeichnet, aber "inaktiv"; Sie sollten sich nicht in Wordpress anmelden können. Aus diesem Grund muss ich mich in das Wordpress Login System einklinken.Wie hänge ich mich in das Wordpress-Anmeldesystem ein, um einige Benutzer programmgesteuert zu stoppen?

Wenn ein Benutzer beispielsweise "bad_james" ist, kann er sich nicht anmelden, auch wenn er einen gültigen WP-Login und PWD hat. Das WP-Admin-Panel bietet kein Flag, um Benutzer zu blockieren.

Gibt es eine Möglichkeit, einen Login-Filter zu implementieren?

Cheers,
Davide

Antwort

9

Sie entweder die wp_authenticate Funktion überlasten (die Funktion im Code sehen hier: http://core.trac.wordpress.org/browser/trunk/wp-includes/pluggable.php) und zurück ein WP_error, wenn Sie dem Benutzer die Anmeldung nicht erlauben möchten.

Oder besser, verwenden Sie den Filter authenticate und geben Sie Null zurück, wenn Sie nicht möchten, dass der Benutzer sich anmeldet, z.

add_filter('authenticate', 'check_login', 10, 3); 
function check_login($user, $username, $password) { 
    $user = get_userdatabylogin($username); 

    if(/* check to see if user is allowed */) { 
     return null; 
    } 
    return $user; 
} 
+7

Damit der Filter funktioniert, musste ich die Priorität von 10 auf 40 ändern. WordPress Core hat einige Filter für die Authentifizierung mit den Prioritäten 20 und 30. Die Priorität auf 40 stellt sicher, dass unser Filter zuletzt ausgeführt wird . – joeljoeljoel

+1

get_userdatabogin ist veraltet. Sollte es zu etwas wie '$ user = get_user_by ('login', 'loginname') wechseln;' – Cam

8

Es gibt ein paar Probleme mit mjangda Antwort, damit ich eine Version bin Entsendung, die mit Wordpress arbeitet 3.2

Die wichtigsten Probleme mit der return-Anweisung waren. Er sollte ein WP_User-Objekt zurückgeben. Das andere Problem war, dass die Priorität nicht hoch genug war.

Verwandte Themen