Was ist der beste Weg, um Benutzerdaten auf mehreren Wordpress-Websites zu teilen?

10

Erstens ist Multisite nicht das, wonach ich suche. Ich habe 5 Websites, die Wordpress verwenden, alle auf separaten Domänen, für die ich Benutzerkonten aktivieren möchte. Ich benötige Benutzerdaten, die im gesamten Netzwerk geteilt werden sollen. Wenn ein Benutzer ein Konto erstellt, hat er auch sofortigen Zugriff auf alle anderen Websites. Was ich versuche, wird von Wordpress bei Verwendung von Multisite nicht empfohlen:

Wenn Sie Websites erstellen möchten, die stark miteinander verbunden sind, Daten gemeinsam nutzen oder Benutzer gemeinsam nutzen, ist ein Netzwerk mit mehreren Standorten möglicherweise nicht die beste Lösung. - http://codex.wordpress.org/Before_You_Create_A_Network (1. Absatz, 3. Satz)

Ich habe versucht, den "Shared User Table Trick" zu verwenden, wie hier erwähnt: http://wordpress.org/support/topic/multiple-sites-same-users-how und hier http://xentek.net/articles/528/ Implementierung des WordPress-Shared-Users-Table-Tricks / und einer Reihe anderer Stellen ... Das Problem ist, dass diese Informationen 2-7 Jahre alt sind und ich Wordpress 3.5.1 verwende und dieser "Trick" dies nicht tut scheint nicht zu funktionieren.

Ich habe versucht, diesen Code in wp-config um die $table_prefixZeile einzufügen .

define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USER_META_TABLE', 'wp_usermeta');

Kurz gesagt, ich glaube nicht, dass dieser Trick mehr funktioniert, da ich mich überhaupt nicht bei der zweiten Site auf der Administratorseite anmelden kann.

Irgendwelche Vorschläge, wie diese Daten am besten verknüpft werden können?

Ian
quelle
1
Ich verstehe nicht, warum CUSTOM_USER_TABLEes nicht funktionieren würde ... Sehen Sie, ob hier etwas ist: wordpress.stackexchange.com/search?q=CUSTOM_USER_TABLE
brasofilo
Wenn ich CUSTOM_USER_TABLE verwende, werden Benutzer zwar zwischen Websites geteilt, auf der zweiten Website kann ich mich jedoch überhaupt nicht als Administrator anmelden. Wenn ich stundenlang nach Plugins und Artikeln suche, die 2-7 Jahre alt sind, glaube ich, dass dieser Trick in 3.5.1 nicht mehr funktioniert ...
Ian
Die Frage ist , dass dies nicht ein ist Trick , es ist ein Kernmerkmal . Es scheint, dass kein Fehler gemeldet wurde und nichts Relevantes in der Liste [wp-hackers]
angezeigt wird
Danke für deine Kommentare. Ich konnte die Antwort finden, indem ich einige Dinge, die ich in Ihren Links gesehen habe, genauer untersuchte. Ich habe meine Lösung unten veröffentlicht. Nochmals vielen Dank @brasofilo
Ian
Wirklich großartig, dass Sie fast alle Möglichkeiten zum Teilen der Benutzer abgedeckt haben. Aber ich habe hier eine etwas andere Situation. Ich habe 5 WordPress-Website, dass jede bestimmte Website ihre eigene Datenbank hat. Wie kann ich Ihre Lösung verwenden, um alle separaten Benutzertabellen so zu verbinden, dass sich ein neuer Benutzer, der sich auf einer von 5 Websites registriert, sofort mit einer einzigen Registrierung bei einer anderen Website anmelden kann? Ich bin mir bewusst, wie ich dies in einer einzigen Datenbank mithilfe der WPMU erreichen kann, aber ich finde keine Möglichkeit, dies bei separaten WordPress-Installationen zu tun. Wird jede Hilfe schätzen. Vielen Dank

Antworten:

8

Ok, zuallererst fühle ich mich wie ein Idiot, obwohl zu meiner Verteidigung die meisten Artikel, die darüber sprechen, kein sehr wichtiges Detail erwähnen, um diese Arbeit zu machen. Die Antwort ist, dass Sie die Berechtigung für mindestens einen Administrator in der Datenbank festlegen müssen. Diese Informationen finden Sie im Codex hier: http://codex.wordpress.org/Editing_wp-config.php#Custom_User_and_Usermeta_Tables

Nachdem Sie die Datei wp-config.php eingerichtet haben, müssen Sie unbedingt das Feld wp_capabilities (in meinem Fall wp_usermeta) und die Spalte meta_value in der Master-Usermeta-Tabelle (in meinem Fall wp_usermeta) ändern. Tun Sie dies über phpMyAdmin.

Hinweis: Führen Sie dies aus, damit sich mindestens ein Benutzeradministrator anmeldet. Sie können alle anderen Benutzer- / Administratorrollen über das Backend anpassen, sobald Sie sich anmelden.

Screenshot, welche Benutzerberechtigungen geändert werden

Für jede Website, die erstellt wird, muss dem Präfix für neue Websites die Administratorbenutzerrolle zugewiesen sein.

In meinem Fall sieht es so aus, da ich dies momentan nur auf 2 Websites zum Laufen gebracht habe:

a:1:{s:13:"administrator";s:1:"1";}
tbs_capabilities = a:1:{s:13:"administrator";s:1:"1";}

Screenshot des wp_usermeta-Werts

In der ersten Zeile werden Berechtigungen für das Standardtabellenpräfix (in diesem Fall wp_) und in der zweiten Zeile die Berechtigungen für die zweite Website (in diesem Fall mit dem Präfix tbs_) festgelegt.

Vielen Dank an brasofilo für den Kommentar, der mich dazu veranlasste, ein wenig weiter zu graben, um mein Problem endlich zu lösen!

Ich hoffe, dass diese Antwort anderen helfen kann, die das gleiche Problem hatten wie ich.

Ian
quelle
Ich habe diese Funktion nie benutzt, bin aber froh zu wissen, dass es diesen kleinen Trick gibt, damit sie funktioniert;) Schöne Zusammenfassung +1
brasofilo
1
danke, das sollte unbedingt in den tutorials erwähnt werden!
Mircea Sandu
2

Bei der Freigabe von wp_users und wp_meta tritt ein weiteres Problem auf. Bei einer anderen WordPress-Installation werden die Benutzer zwar erkannt, die Rollen der Benutzer von der anderen Website werden jedoch nicht erkannt . Die Rolle wird als undefiniert angezeigt.

Also haben Sie Ihre wp-config.php nach Bedarf bearbeitet:

define('CUSTOM_USER_TABLE', 'someprefix_users');
define('CUSTOM_USER_META_TABLE', 'someprefix_usermeta');

Ich denke, der einfachste Weg, dies zu tun, ohne an der Datenbank zu basteln, ist die Verwendung von wp-Interna. Bei der Anmeldung ist es möglich, eine Rolle zuzuweisen. Angenommen, wir benötigen die Rolle des Mitwirkenden für alle und die Administratorrolle für den Benutzer "Superman".

function check_user_role($user_login, $user) {
  if ( $user_login == 'superman' ) {
     $user->add_role('administrator');
     } else {
     $user->add_role('contributor');
  }
}

// the action fired on login
add_action('wp_login', 'check_user_role', 10, 2);

Benutzer, die von der ursprünglichen Website kommen, erhalten beim Anmelden die Rolle des Mitwirkenden zugewiesen.

  • Sie können die Benutzerprüfung löschen, nachdem Sie sich beim Administrator angemeldet haben.
  • Benutzer können mehr als eine Rolle haben, Funktionen sind wichtig.

http://codex.wordpress.org/Class_Reference/WP_User

cenk
quelle
0

Ich musste eine neue Zeile erstellen:

meta_key='tbs_capabilities' meta_value='a:1:{s:13:"administrator";b:1;}'

und user_id=1. Die von Ihnen beschriebene Methode hat nicht funktioniert.

James Smith
quelle
1
In der obigen Antwort ist "tbs" das Präfix der zweiten WordPress-Website, die ich installiert habe. Anstatt dass die Tabelle wp_posts ist, wären sie tbs_posts. Es sei denn, Sie setzen explizit $ table_prefix = 'tbs_'; es wird nicht funktionieren.
Ian