2009-11-26 6 views
8

Pracuję nad portalem opartym na Wordpress, który integruje się z niestandardowym e-commerce. E-commerce służy również jako "panel kontrolny": wszystkie role są tam ustanowione. Niektórzy użytkownicy są rejestrowani, ale "nieaktywni"; nie powinny być w stanie zalogować się do Wordpress. Z tego powodu muszę podłączyć się do systemu logowania Wordpress.Jak podłączyć się do systemu logowania Wordpress, aby zatrzymać niektórych użytkowników programowo?

Jeśli użytkownik jest, powiedzmy, "bad_james", nie może się zalogować, nawet jeśli ma ważne logowanie WP i PWD. Panel administracyjny WP nie zapewnia flagi do blokowania użytkowników.

Czy istnieje sposób na wdrożenie filtru logowania?

Cheers,
Davide

Odpowiedz

9

Można albo przeciążyć funkcję wp_authenticate (patrz funkcję w kod tutaj: http://core.trac.wordpress.org/browser/trunk/wp-includes/pluggable.php) i zwraca WP_error, jeśli nie chcesz pozwolić użytkownikowi na logowanie.

Albo lepiej, użyj filtru authenticate i zwróć wartość null, jeśli nie chcesz, aby użytkownik się logował, np.

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

Aby filtr działał, musiałem zmienić priorytet z 10 na 40. Rdzeń WordPress ma kilka filtrów do uwierzytelnienia z priorytetami 20 i 30. Ustawienie naszego priorytetu na 40 zapewnia, że ​​nasz filtr jest uruchamiany jako ostatni . – joeljoeljoel

+1

get_userdatabylogin jest przestarzałe. Powinien zmienić to na coś w stylu '$ user = get_user_by ('login', 'loginname');' – Cam

8

Było kilka problemów z mjangda odpowiedzi, więc jestem delegowania wersję, która działa z WordPress 3.2

Główne problemy były ze stwierdzeniem powrotnej. Powinien zwrócić obiekt WP_User. Innym problemem było to, że priorytet nie był wystarczająco wysoki.

Powiązane problemy