Przywracanie usuniętego administratora w WordPressie

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()wp_create_user() należy wprowadzić swoje dane.

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()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.

Pobierz pliki

[zip href="http://iworks.pl/wp-content/uploads/2013/07/iworks-admin-privileges.zip"]iworks-admin-privileges[/zip]

Poprzedni

WordPress 3.5.2

Następne

Jak w WordPressie przywrócić odnośniki?

10 komentarzy

  1. 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ę.

  2. eRIZ

    Zaescape’owało Ci strzałki do klas, temu nie działa.

  3. 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?

    • @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ć.

  4. Dzięki za informację! :)

  5. Bardzo przydatny „kursik”, dzieki

  6. 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.

    • @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ą.

Oparte na WordPress & Theme by Anders Norén