Wenn es Probleme mit der eigenen WordPress-Website gibt, kommt es vor, dass man einen Nutzer anlegen muss, ohne Zugang zur Datenbank oder dem WordPress-Admin zu haben. Dann ist es nützlich, wenn man sich einen Benutzer mittels FTP anlegen oder anmelden kann. Hier erfährst du also, wie du ein Must Use Plugin
dazu verwenden kannst, einen Administrator für WordPress anzulegen und anzumelden.
Must Use Plugin erstellen
Ein Must Use Plugin wird immer vor allen anderen Plugins geladen und es muss auch nicht wie andere Plugins aktiviert werden. Sobald angelegt, wird es automatisch von WordPress verwendet. Zudem ist ein Must Use Plugin nicht ohne Umstände im WordPress-Admin ersichtlich.
Um ein Must Use Plugin zu erstellen, benötigen wir erst einmal den Ordner mu-plugins
innerhalb von wp-content
. Der Pfad sollte am Ende so aussehen: /wp-content/mu-plugins/
Anschließend legen wir dort eine PHP-Datei an. Der Name ist hier völlig egal und es muss auch erst einmal nichts weiter in der Datei stehen. Anders als bei normalen Plugins ist auch kein Plugin-Header notwendig. Sobald die PHP-Datei dort im Ordner ist, wird sie von WordPress geladen, du kannst also wirklich alles in die Datei schreiben.
In unserem Beispiel heißt die Datei jetzt insert-admin.php
und wir legen sie im Verzeichnis /wp-content/mu-plugins/
ab.
<?php
# /wp-content/mu-plugins/insert-admin.php
Code-Sprache: HTML, XML (xml)
WordPress-Administrator anlegen
Ein Benutzer mit PHP anzulegen ist nicht kompliziert, denn wir verwenden dafür die Funktion wp_insert_user
. Dadurch das unser Must Use Plugin automatisch geladen wird, wird die wp_insert_user
immer ausgeführt. Da wir gerne mit Hooks arbeiten, verwenden wir unsere Lieblingshook, nämlich template_redirect
. Diese Hook wird bei jedem Neuladen der Seiten ausgeführt und ist super dafür geeignet, um Weiterleitungen auszuführen, also etwas, was wir ja am Ende machen wollen. Wir möchten unseren angelegten Benutzer in den Adminbereich weiterleiten.
<?php
# /wp-content/mu-plugins/insert-admin.php
// Jedes Mal wenn die Seite neu lädt,
// soll unser Script ausgeführt werden
add_action('template_redirect', function () {
// Nur wenn wir domain.de?insert_admin eingeben,
// wird unser Script ausgeführt
if (!isset($_GET['insert_admin')) {
return;
}
$data = [
'user_login' => 'new_admin', // Anmeldenamen
'user_email' => 'admin(at)pixelbart.de', // E-Mail
'user_pass' => '123456', // Klartextpasswort
'role' => 'administrator', // Rolle
];
// Hier wird geprüft, ob der Nutzer
// bereits existiert
$user = get_user_by('email', $data['user_email']);
if (!$user) {
$user_id = wp_insert_user($data);
if ($user_id) {
// Wird ausgeführt, sobald der Nutzer
// angelegt wurde.
}
// Wir stoppen das Script hier,
// damit alles danach nicht mehr
// ausgeführt wird
return;
}
// Wenn der Nutzer bereits existiert,
// packen wir die ID in eine Variable.
$user_id = $user->ID;
});
Code-Sprache: HTML, XML (xml)
Wenn wir jetzt die URL domain.de?insert_admin
aufrufen, dann wird ein Nutzer angelegt, sofern nicht vorhanden. Der Benutzer new_admin
mit der E-Mail admin(at)pixelbart.de
ist also jetzt angelegt.
- Siehe auch: wp_insert_user (wp.org)
Benutzer mit PHP anmelden
Wir können jetzt theoretisch in den WordPress-Admin wechseln und uns ganz normal mit den Zugangsdaten anmelden, die wir festgelegt haben. Wir könnten aber auch ein Script schreiben, welches uns automatisch anmeldet.
<?php
# /wp-content/mu-plugins/insert-admin.php
/**
* Hiermit melden wir den Nutzer an und leiten zum
* WordPress-Admin weiter. Wir benötigen hier nur
* die Benutzer-ID.
*
* @param int $user_id ID des Benutzers.
*/
function pxbt_login_user(int $user_id)
{
wp_clear_auth_cookie();
wp_set_current_user($user_id);
wp_set_auth_cookie($user_id);
wp_safe_redirect(user_admin_url());
exit();
}
Code-Sprache: HTML, XML (xml)
Jetzt können wir einen beliebigen Benutzer, sofern wir die ID haben, anmelden. Dafür tun wir dann folgendes: pxbt_login_user(1234);
und wir werden in den Adminbereich weitergeleitet, als angemeldeter Benutzer mit der ID 1234
. Das fügen wir jetzt in unser Script weiter oben ein, damit alles gleichzeitig passiert.
Vollständiges Beispiel
<?php
# /wp-content/mu-plugins/insert-admin.php
// Jedes Mal wenn die Seite neu lädt,
// soll unser Script ausgeführt werden
add_action('template_redirect', function () {
if (!isset($_GET['insert_admin')) {
return;
}
$data = [
'user_login' => 'new_admin',
'user_email' => 'admin(at)pixelbart.de',
'user_pass' => '123456',
'role' => 'administrator',
];
$user = get_user_by('email', $data['user_email']);
if (!$user) {
$user_id = wp_insert_user($data);
if ($user_id) {
// $user_id anmelden
pxbt_login_user($user_id); # <-- NEU
}
return;
}
$user_id = $user->ID;
// $user_id anmelden
pxbt_login_user($user_id); # <-- NEU
});
Code-Sprache: HTML, XML (xml)
Wenn wir jetzt die domain.de?insert_admin
aufrufen, wird nicht nur der Benutzer angelegt, sondern direkt angemeldet. Wichtig ist, dass du das Plugin löschst, sobald du es nicht mehr benötigst. Oder du sicherst es besser ab, damit nicht jeder einen Benutzer mit Adminrechten anlegen und anmelden kann.