Dość często spotykam pytanie typu:
Usunąłem konto administratora, jak je przywrócić?
Bardzo skutecznym i dość prostym rozwiązaniem jest stworzenie malutkiego pliku, do którego zapukamy przez przeglądarkę:
require 'wp-load.php'; $user_id = wp_create_user( 'marcin', '123456', 'exampe@domain.com' ); $wp_user_object = new WP_User( $user_id ); $wp_user_object->remove_role( 'subscriber' ); $wp_user_object->add_role( 'administrator' ); |
Wystarczy dodać plik (jest załączony na dole wpisu) do głównego katalogu serwisu i wybrać go w przeglądarce. W funkcji wp_create_user()
Po uruchomieniu zostanie założony użytkownik „marcin” z hasłem „123456” i wybranym adresem email.
Jeżeli mamy już użytkownika w bazie, a nie ma on uprawnień, to musimy pobrać identyfikator użytkownika za pomocą funkcji username_exists()
require 'wp-load.php'; $user_id = username_exists( 'marcin' ); $wp_user_object = new WP_User( $user_id ); foreach ( array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' ) as $role ) { $wp_user_object->remove_role( $role ); } $wp_user_object->add_role( 'administrator' ); |
Po uruchomieniu tego pliku użytkownikowi „marcin” zostaną przydzielone uprawnienia administratora, po uprzednim zabraniu innych uprawnień.
Pamiętaj, żeby usunąć pliki po przywróceniu uprawnień administratora.
CLI
Lepszą metodą jest skorzystanie ze skryptu CLI, za pomocą którego można podać nazwę, adres email oraz opcjonalnie hasło. Metoda ta jest, moim zdaniem, zdecydowanie lepsza, ale wymaga dostępu do powłoki skryptowej (shell). Poniższy skrypt dodaje uprawnienia, jeżeli użytkownik istnieje, w przeciwnym wypadku zakłada użytkownika i dodaje mu uprawnienia administratora.
require 'wp-load.php'; $user_name = $argv[1]; $user_email = $argv[2]; $password = wp_generate_password( $length = 16, false ); if ( isset( $argv[3] ) ) { $password = $argv[3]; } $user_id = function_exists( 'username_exists' )? username_exists( $user_name ):null; $wp_user_object = new WP_User( $user_id ); foreach ( array( 'administrator', 'editor', 'author', 'contributor', 'subscriber' ) as $role ) { $wp_user_object->remove_role( $role ); } $wp_user_object->add_role( 'administrator' ); if ( function_exists( 'username_exists' ) && username_exists( $user_name ) ) { die( sprintf ( 'User: %s alredy exists!%s', $user_name, PHP_EOL ) ); } if ( function_exists( 'email_exists' ) && email_exists( $user_email ) ) { die( sprintf ( 'User email: %s alredy exists!%s', $user_email, PHP_EOL ) ); } $user_id = wp_create_user( $user_name, $password, $user_email ); printf( '%s (%s): %s%s', $user_name, $user_email, $password, PHP_EOL ); $wp_user_object = new WP_User( $user_id ); $wp_user_object->remove_role( 'subscriber' ); $wp_user_object->add_role( 'administrator' ); |
Skrypt kopiujemy do głównego katalogu i uruchamiamy:
./add_admin.php marcin marcin@example.com 123456 |
Zmiana bezpośrednio w bazie danych
Użycie opcji zalecam tylko użytkowników zaawansowanych i tylko w przypadku skasowania uprawnień:
Jeżeli nie skasowaliśmy użytkownika, to najprostszym rozwiązaniem jest wstrzyknięcie odpowiedniego ciągu znaków do bazy:
UPDATE wp_usermeta SET wp_capabilities = 'a:1:{s:13:"administrator";s:1:"1";}' WHERE user_id = X; |
Zamień prefix wp_ na własny oraz musisz znać user_id.
Marek
Pierwszy kod mi nie działa, chyba brakuje add_role w ostatniej linijce.
Fajny i przydatny artykuł, udało mi się dzięki niemu odzyskać dostęp do jednego bloga. Dziękuję.
Marcin Pietrzak
@Marek: racja, poprawiłem. Sprawdziłem też kod do zaciągnięcia i tam było dobrze.
eRIZ
Zaescape’owało Ci strzałki do klas, temu nie działa.
Marcin Pietrzak
Być może :D
Małgorzata
Witam, wczoraj zablokowano mój blog, nie dostałam informacji z jakich przyczyn. Nie mogę się zalogować – tak jakby usunięto cały mój profil… Czy możesz mi jakoś pomóc? Wysyłałam do nich maile ale brak odpowiedzi… Przypuszczam, że jej nigdy nie dostanę.
Czy w opisany Przez Ciebie sposób mogę uzyskać dostęp do bloga?
Marcin Pietrzak
@Małgorzata – niestety muszę Cię zmartwić, ponieważ to co tutaj opisałem można zastosować tylko na swoim, czyli hostowanym samodzielnie WordPressie. Posiadając stronę w takim miejscu jak Twoje nie mamy dostępu do plików oraz bazy. Z komunikatu widniejącym na stronie wynika że zostały złamana „jakieś” warunki użycia i zostaje tylko czekanie na odpowiedź wsparcia.
Trzymam kciuki za to, żeby całość udało się wyjaśnić.
Małgorzata
Dzięki za informację! :)
elgo
Bardzo przydatny „kursik”, dzieki
Pinio
A czy można konto administratora przywrócić grzebiąc ręcznie w bazie? W przypadku CMS Joomla jest tabela w bazie, w której można wstawić zapomniane hasło, uprzednio je generując, no i ewentualnie dodać konto.
Marcin Pietrzak
@Pinio: tak, można to zrobić, w końcu wszystkie dane są trzymane w właśnie w bazie. Skrypty które tu są po prostu to właśnie robią.