Czasami zdarza się, że musisz zmienić hasło administratora, ponieważ nikt go już nie pamięta, lub dodać nowego użytkownika z takimi uprawnieniami nie mogąc się zalogować do kokpitu WordPressa. Można to oczywiście zrobić zarówno z poziomu bazy danych, jak i za pomocą WP-CLI. Tylko co, jeśli sama myśl o modyfikacji bazy danych napawa Cię strachem, a polecenia WP-CLI są Ci obce lub w ogóle nie wiesz, co to jest?
Jeśli masz dostęp do katalogu WordPressa przez FTP, istnieje prostsze rozwiązanie. W tym artykule pokażę Ci, jak za pomocą pliku PHP:
- zmienić hasło i adres e-mail dowolnego użytkownika (jeśli znasz jego login)
- dodać nowego użytkownika i przypisać mu określoną rolę (najczęściej administratora)
Ważne!
To rozwiązanie należy stosować z najwyższą ostrożnością, zwłaszcza na stronach produkcyjnych, czyli działających i opublikowanych.
Kod PHP dodający nowego administratora w WordPress
<?php
require 'wp-load.php';
$new_user_login = 'uzytkownik';
$new_user_pass = 'NoweHaslo';
$new_user_mail = 'adresemail@example.com';
$user = get_user_by( 'login', $new_user_login );
if ( !empty( $user ) ) {
wp_update_user( array(
'ID' => $user->ID,
'user_pass' => $new_user_pass,
'user_email' => $new_user_mail,
));
echo 'Nowe hasło "'. $new_user_pass .'" oraz nowy adres e-mail "'. $new_user_mail .'" dla użytkownika "'. $new_user_login .'" zostały ustawione.';
}
else {
$user_id = wp_create_user( $new_user_login, $new_user_pass, $new_user_mail );
$user = new WP_User( $user_id );
echo 'Nowy użytkownik "'. $new_user_login .'" z hasłem "'. $new_user_pass .'" został utworzony.';
}
$user->add_role( 'administrator' );
unlink(__FILE__);
?>Jak korzystać z tego rozwiązania
Skopiuj podany kod do nowego pliku tekstowego, wprowadź w nim ewentualne zmiany i zapisz go jako plik z rozszerzeniem .php, np. nowyadmin.php. Następnie prześlij pliku do głównego katalogu WordPressa za pomocą klienta FTP. Na koniec uruchom plik w przeglądarce. Zakładając, że Twoja strona ma adres „mojastrona.pl”, aby to zrobić wpisz w pasek adresu:
https://mojastrona.pl/nowyadmin.php
Jeśli nie wprowadzałeś/-aś żadnych zmian w kodzie, po uruchomieniu pliku i wykonaniu zawartych w nim instrukcji zostanie zmienione hasło oraz adres e-mail istniejącego użytkownika lub utworzone nowe konto o loginie „uzytkownik”. W obu przypadkach hasło zostanie zmienione na „NoweHaslo”, adres e-mail zostanie ustawiony na „adresemail@example.com”, a a użytkownikowi zostanie przypisana rola „administartor”. Po zakończeniu operacji w oknie przeglądarki pojawi się stosowna informacja, a plik zostanie automatycznie usunięty z katalogu.
Co zrobić w przypadku błędu
Jeśli wprowadziłeś/-aś zmiany w kodzie i po jego uruchomieniu pojawił się błąd, usuń plik ręcznie przez FTP. Następnie sprawdź, co mogło być tego przyczyną – często jest to drobiazg, np. brak średnika. Jeśli na co dzień nie programujesz, nie przejmuj się – to normalne i zdarza się nawet doświadczonym programistom.
Opis działania kodu
Poniżej znajdziesz wyjaśnienie poszczególnych fragmentów kodu, co pozwoli Ci na wprowadzenie ewentualnych zmian.
Załadowanie WordPressa
require 'wp-load.php';Ten kod umożliwia korzystanie z funkcji WordPressa. Ponieważ skrypt działa niezależnie, potrzebuje dostępu do API WordPressa, aby wykonywać operacje na użytkownikach.
Zdefiniowanie danych użytkownika
$new_user_login = 'uzytkownik';
$new_user_pass = 'NoweHaslo';
$new_user_mail = 'adresemail@example.com';W tym miejscu określamy login użytkownika, którego dane chcemy zmienić lub którego chcemy dodać nowe hasło oraz nowy adres e-mail. Jeśli chcesz je zmienić, edytuj odpowiednie wartości, ale pamiętaj, by nie usuwać cudzysłowów, w których są zapisane.
Sprawdzenie, czy użytkownik już istnieje
$user = get_user_by( 'login', $new_user_login );Ten fragment sprawdza, czy w bazie danych znajduje się użytkownik o loginie podanym w zmiennej $new_user_login. Jeśli konto już istnieje, skrypt zaktualizuje jego dane, natomiast jeśli użytkownik nie zostanie znaleziony, zostanie utworzone nowe konto z podanymi wartościami.
Aktualizacja danych użytkownika
if ( !empty( $user ) ) {
wp_update_user( array(
'ID' => $user->ID,
'user_pass' => $new_user_pass,
'user_email' => $new_user_mail,
));
echo 'Nowe hasło "'. $new_user_pass .'" oraz nowy adres e-mail "'. $new_user_mail .'" dla użytkownika "'. $new_user_login .'" zostały ustawione.';
}Jeśli użytkownik o podanym loginie istnieje, jego hasło oraz adres e-mail zostaną zaktualizowane. Po zakończeniu operacji w oknie przeglądarki pojawi się komunikat potwierdzający dokonanie zmian.
Tworzenie nowego użytkownika
else {
$user_id = wp_create_user( $new_user_login, $new_user_pass, $new_user_mail );
$user = new WP_User( $user_id );
echo 'Nowy użytkownik "'. $new_user_login .'" z hasłem "'. $new_user_pass .'" został utworzony.';
}Jeżeli użytkownik o podanym loginie nie istnieje, skrypt utworzy nowe konto z wcześniej zdefiniowanym hasłem i adresem e-mail. Po pomyślnym dodaniu użytkownika w oknie przeglądarki wyświetli się stosowna informacja.
Dodanie roli administratora (lub innej)
$user->add_role( 'administrator' );Na tym etapie nowemu lub zaktualizowanemu użytkownikowi zostaje dodana rola Administratora, dając mu tym samym pełne uprawnienia w systemie WordPress. Rola „administrator” jest jedną z domyślnych, ale możesz także przypisać użytkownikowi inne role, takie jak:
- editor – Redaktor (Editor)
- author – Autor (Author)
- contributor – Współpracownik (Contributor)
- subscriber – Subskrybent (Subscriber)
- shop_manager – Menedżer Sklepu (Shop Manager), jeśli korzystasz z WooCommerce
Możesz dodać więcej niż jedną rolę do użytkownika. Wystarczy wywołać metodę add_role() dla każdej z nich. Na przykład, aby przypisać rolę Autora i Menedżera Sklepu, użyj:
$user->add_role( 'author' );
$user->add_role( 'shop_manager' );Co prawda WordPress pozwala na przypisanie wielu ról do jednego użytkownika, ale warto pamiętać, że niektóre z nich mogą się pokrywać. Na przykład rola „administrator” obejmuje już wszystkie uprawnienia roli „editor” i innych. Jeśli więc użytkownik ma przypisaną rolę administratora, nie ma potrzeby dodawania mu dodatkowych ról, ponieważ już posiada pełny dostęp do systemu.
Usunięcie pliku
unlink(__FILE__);Na końcu skryptu wywoływana jest funkcja, która usuwa plik, w którym znajduje się kod. Jest to zabezpieczenie przed ponownym wykonaniem tego samego skryptu. Jeśli jednak w trakcie działania skryptu wystąpi błąd, na przykład spowodowany przypadkowym usunięciem średnika, funkcja unlink() może się nie wykonać, a plik pozostanie na serwerze. W takim przypadku należy usunąć go ręcznie.
Warto wiedzieć
W niektórych konfiguracjach PHP, zwłaszcza na serwerach współdzielonych lub z restrykcyjnymi ustawieniami bezpieczeństwa, funkcja unlink() może być wyłączona w pliku konfiguracyjnym php.ini. Ma to na celu zapobieganie przypadkowemu usunięciu plików. W takich sytuacjach usunięcie pliku może wymagać ręcznej interwencji.



