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()1 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()2
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
pobierz plik: iworks-admin-privileges
Kommentare