Unser Ziel ist es, zwei WordPress Webseiten einzurichten, die sich Logins und die gleichen Benutzer teilen. Sobald ein Benutzer eine Webseite abonniert hat, kann er auf die andere Webseite mit der gleichen Rolle und den gleichen Fähigkeiten zugreifen.
Um dieses Ziel zu erreichen, sollten wir in der Lage sein, die WordPress Konfigurationsdatei zu bearbeiten und die Datenbanktabellen zu aktualisieren. Ein allgemeines Verständnis der WordPress-Architektur und der Datenbankstruktur ist unerlässlich, ebenso wie ein Grundwissen über die WordPress-Entwicklung. Keine Sorge, wenn du kein Experte bist. Folge einfach den Anweisungen in diesem Beitrag und stelle deine Fragen in den Kommentaren.
Bevor wir mit dem Programmieren beginnen, müssen wir wissen, wo WordPress die Benutzerrollen und -fähigkeiten speichert. Also ist unser erster Schritt, tief in die Datenbanktabellen einzutauchen.
Wichtig: Das Folgende wird in der Kinsta-Umgebung nicht sofort funktionieren, da wir nur eine WordPress-Installation pro Webseite zulassen (es sei denn, du betreibst WordPress Multisite). Es könnte möglich sein, dies auf unserer Plattform zum Laufen zu bringen, aber es würde einige zusätzliche Einstellungen oder Entwicklungen erfordern. Wir empfehlen, dies mit einem WordPress-Entwickler zu besprechen.
- Benutzerdaten und Metadaten
- Benutzerdefinierte Benutzertabellen definieren – Logins freigeben
- WordPress installieren
- Rollen und Fähigkeiten
- Automatisches Duplizieren von Caps und Levels mit einer Funktion
Benutzerdaten und Metadaten
Standardmäßig speichert WordPress benutzerbezogene Daten in drei Tabellen: {$pref}options
, {$pref}users
und {$pref}usermeta
.
- Die Tabelle
{$pref}options
speichert die komplette Liste der verfügbaren Rollen und Fähigkeiten in einer Zeile, deren option_key Feld{$pref}user_roles
ist. - Die
{$pref}users
Tabelle speichert grundlegende Benutzerdaten, wie Login, Passwort, E-Mail, URL, etc. - Die
{$pref}usermeta
Tabelle speichert Benutzer-Metadaten.
Wenn wir an neuen WordPress Installationen arbeiten, müssen wir uns nicht um die {$pref}user_roles
Zeile in der {$pref}options
Tabelle kümmern, da das entsprechende option_value Feld immer den gleichen Wert hat. Wir sollten diese Zeile nur für den Fall berücksichtigen, dass wir an bestehenden Installationen arbeiten, bei denen Rollen oder Fähigkeiten geändert wurden.
Mach dir auch keine Sorgen um die {$pref}users
Tabelle, denn sie speichert grundlegende Benutzerdaten, die wir nicht ändern werden, wenn wir Benutzer zwischen Webseiten austauschen.
Die {$pref}usermeta
Tabelle ist die einzige Tabelle, die wir aktualisieren werden, um unser Ziel zu erreichen.
{$pref}usermeta
speichert Benutzer-Metadaten in Schlüssel/Wert-Paaren. In dieser Tabelle werden in fünf Zeilen die Daten gespeichert, die wir berücksichtigen müssen.
In der ersten Zeile ist das meta_key Feld auf {$pref}capabilities
gesetzt und das entsprechende meta_value Feld ist ein serialisiertes Array, das die Benutzerrolle enthält. Die zweite Zeile speichert die Benutzerebene (beachte, dass die Benutzerebenen seit WordPress 3.0 veraltet sind). Die verbleibenden drei Zeilen betreffen Dashboard-Einstellungen, auf die wir in diesem Beitrag nicht weiter eingehen werden.
Benutzerrolle, Level und Einstellungen sind spezifisch für die WordPress-Installation und werden durch den gleichen $pref
-Wert identifiziert. Es ist eine wichtige Information, wenn unser Ziel ist, Benutzer zwischen Webseiten zu teilen, denn wir müssen diese Zeilen duplizieren und das meta_key
Feld entsprechend ändern.
Das ist alles, was wir über Benutzertabellen wissen müssen, wenn wir das Ziel haben, Logins und Benutzer zwischen neuen WordPress-Installationen zu teilen. Wenn wir an bestehenden Webseiten arbeiten, sollten wir bedenken, dass viele Plugins zusätzliche Zeilen zu {$pref}usermeta
hinzufügen und wir eventuell einen tieferen Blick in die Datenbanktabellen werfen müssen.
Nachdem wir das mit den Benutzertabellen gesagt haben, können wir einen Schritt weiter gehen. Nun müssen wir zwei spezifische Konstanten in der wp-config.php Datei definieren.
Eigene Benutzertabellen definieren – Logins teilen
WordPress erlaubt uns, anstelle von {$pref}users
und {$pref}usermeta
benutzerdefinierte Tabellen zu setzen. Das bedeutet, wenn zwei (oder mehr) WordPress Webseiten sich eine Datenbank teilen, können wir die gleichen Benutzer und Usermeta Tabellen für alle setzen. Das hat zur Folge, dass alle Webseiten, die sich diese Tabellen teilen, auch die gleichen Benutzer haben.
Wir müssen nur CUSTOM_USER_TABLE
und CUSTOM_USER_META_TABLE
in der wp-config.php Datei definieren, wie im folgenden Code gezeigt:
// custom users and usermeta tables
define( 'CUSTOM_USER_TABLE', 'my_users_table' );
define( 'CUSTOM_USER_META_TABLE', 'my_usermeta_table' );
Da wir nun wissen, was zu tun ist, ist es an der Zeit, unsere beiden WordPress-Installationen zu starten.
WordPress installieren
Der Einfachheit halber werde ich die WordPress Root-Ordner first und second nennen. first_
und second_
werden die jeweiligen Tabellenpräfixe sein.
Lass uns nun die erste Installation ausführen.
Wenn die erste WordPress Webseite steht und läuft, können wir ihre Konfigurationsdatei bearbeiten. Öffne /first/wp-config.php und füge die folgenden Zeilen über dem Kommentar ’stop editing‘ ein:
$table_prefix = 'first_';
define('WP_DEBUG', true);
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
// custom users and usermeta tables
define( 'CUSTOM_USER_TABLE', $table_prefix . 'users' );
define( 'CUSTOM_USER_META_TABLE', $table_prefix . 'usermeta' );
/* That's all, stop editing! Happy blogging. */
Wir haben den Debug-Modus aktiviert, um WordPress zu zwingen, Fehlermeldungen und Warnungen in der Datei debug.log zu speichern (lies mehr zu diesem Thema in Ein detaillierter Einblick in die Konfiguration von WordPress).
Dann haben wir die Konstanten CUSTOM_USER_TABLE
und CUSTOM_USER_META_TABLE
für die Tabellen first_users
und first_usermeta
definiert. Auf diese Weise ändern wir nicht die Standardeinstellungen von WordPress.
Wir sind fertig mit der ersten Installation. Als nächstes müssen wir die wp-config.php aus dem Ordner der ersten Installation kopieren und es in den Stammordner der zweiten Installation einfügen. Achte darauf, dass du den Wert $table_prefix entsprechend änderst:
$table_prefix = 'second_';
define('WP_DEBUG', true);
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
// custom users and usermeta tables
define( 'CUSTOM_USER_TABLE', 'first_users' );
define( 'CUSTOM_USER_META_TABLE', 'first_usermeta' );
CUSTOM_USER_TABLE
und CUSTOM_USER_META_TABLE
werden auf die Werte der ersten Installation gesetzt: first_users
und first_usermeta
. Das ist alles für die erste Installation.
Wenn wir die zweite Installation ausführen, sollten wir eine nicht existierende E-Mail-Adresse für den Admin-Benutzer einstellen, da WordPress eine Anzahl von existierenden Benutzern aus der Tabelle first_users
findet.
Logge dich in das Admin-Panel der zweiten Installation als Admin ein und liste die WordPress-Benutzer auf. Hier findest du den neuen Admin-Benutzer und alle Benutzer der ersten Webseite (so können sie sich die Logins teilen). Zu diesem Zeitpunkt können sich die Nutzer der einen Webseite nicht mehr auf der anderen Webseite einloggen.
Um den Benutzern auf beiden Webseiten die gleichen Fähigkeiten zu gewähren, müssen wir die {$pref}usermeta
Tabelle aktualisieren.
Rollen und Fähigkeiten
Wenn du eine neue WordPress-Installation durchführst, musst du dich nicht um die {$pref}options
-Tabelle kümmern. Du musst nur die {$pref}usermeta
Tabelle aktualisieren.
In unserem Beispiel, wenn ein neuer Benutzer auf der ersten Webseite erstellt wird, fügt WordPress die Zeilen first_capabilities
und first_user_level
in der Tabelle first_usermeta
hinzu. Um der zweiten Webseite Zugang zu gewähren, sollten diese Zeilen dupliziert werden, wie im Bild unten gezeigt:
Wenn ein neuer Benutzer auf der zweiten Webseite erstellt wird, werden die second_capabilities
und second_user_level
Zeilen zur first_usermeta
Tabelle hinzugefügt.
Um den Benutzern auf allen Webseiten die gleichen Rollen und Berechtigungen zu geben, sollten die Zeilen first_capabilities
und first_user_level
in second_capabilities
und second_user_level
dupliziert werden. Mit diesen beiden Zeilenpaaren in der gleichen first_usermeta
-Tabelle können Benutzer auf beide Webseiten mit den gleichen Rechten zugreifen.
Um alle existierenden usermeta-Zeilen zu aktualisieren, kannst du eine SQL-Abfrage ausführen oder Tabellen aus phpMyAdmin aktualisieren. Aber was ist mit den Nutzern, die unsere Webseiten von nun an abonnieren werden? Laut WordPress Codex würden wir ein Plugin verwenden oder eine eigene Funktion bauen.
Und los geht’s!
Automatisches Duplizieren von Caps und Levels mit einer Funktion
set_user_role
ist ein Action Hook, der immer dann ausgelöst wird, wenn ein neuer Benutzer erstellt oder die Rolle eines bestehenden Benutzers bearbeitet wurde. Dank dieser Aktion können wir Updates der Usermeta-Tabelle automatisieren.
Füge also in der Hauptdatei eines Plugins die folgende Funktion ein:
function ksu_save_role( $user_id, $role ) {
// Site 1
// Change value if needed
$prefix_1 = 'first_';
// Site 2 prefix
// Change value if needed
$prefix_2 = 'second_';
$caps = get_user_meta( $user_id, $prefix_1 . 'capabilities', true );
$level = get_user_meta( $user_id, $prefix_1 . 'user_level', true );
if ( $caps ){
update_user_meta( $user_id, $prefix_2 . 'capabilities', $caps );
}
if ( $level ){
update_user_meta( $user_id, $prefix_2 . 'user_level', $level );
}
}
add_action( 'set_user_role', 'ksu_save_role', 10, 2 );
Die Callback-Funktion hat drei Argumente, von denen zwei erforderlich sind: $user_id
und $role
.
Was die Funktion macht, ist ziemlich selbsterklärend. get_user_meta gibt den Wert des angegebenen Benutzer-Meta-Feldes zurück. Wir haben diese Funktion zweimal aufgerufen, um die Felder first_capabilities
und first_user_level
abzurufen. Dann haben wir diese Werte verwendet, um die Felder second_capabilities
und second_user_level
zur Tabelle first_usermeta
hinzuzufügen.
Lade dieses Plugin auf die erste Webseite hoch und aktiviere es.
Damit die Installationen symmetrisch funktionieren, müssen wir das Plugin einfach in jeder Installation hochladen und aktivieren, aber die richtigen Werte für die Präfixe setzen. Wenn wir zum Beispiel diese Funktion auf der zweiten Webseite aktivieren wollen, müssen wir die Variablen wie folgt deklarieren:
$prefix_1 = 'second_';
$prefix_2 = 'first_';
Also bearbeite und installiere das Plugin auf der zweiten Webseite und erstelle einen neuen Benutzer oder ändere eine bestehende Benutzerrolle. Überprüfe dann die erste Webseite. Die Benutzerrollen werden genau die gleichen sein wie auf der zweiten Webseite.
Zusammenfassung
In diesem Beitrag habe ich erklärt, wie man Benutzern in unabhängigen WordPress-Installationen die gleichen Rechte einräumen kann. Sobald der Benutzer auf einer Webseite registriert ist, kann er auf alle Webseiten zugreifen, die die gleichen Benutzer- und Usermeta-Tabellen haben.
Ich habe angenommen, dass ich mit neuen Installationen arbeite. Wenn du an bestehenden Webseiten arbeitest, solltest du bedenken, dass einige Plugins die Usermeta-Tabelle aktualisiert oder sogar neue Tabellen erstellt haben könnten, die benutzerbezogene Daten speichern. In diesem Fall wäre eine genauere Analyse der Datenbank angebracht.
Wenn du Fragen zur Freigabe von Logins in WordPress hast oder deine Erfahrungen mit uns teilen möchtest, kannst du dich gerne an der Konversation beteiligen, indem du einen Kommentar schreibst.
Der vollständige Code unseres Plugins ist in diesem öffentlichen Gist verfügbar
Schreibe einen Kommentar