Wie teilen Sie WordPress Session und Cookies zwischen Domain und Subdomain?

Ich habe viel Zeit verpasst, indem ich die Antwort auf meine Frage suchte. Für heute habe ich zwei WP-Installationen auf dem einen Server und einem DB aber mit anderem Präfix. Ich habe bereits Benutzer Daten und Meta zwischen zwei Blogs geteilt und es funktioniert gut! Aber ich kann immer noch nicht autologin oder Single Sign On unter zwei Blogs einrichten. Der folgende Code funktioniert nicht in WP3.8.

define('COOKIE_DOMAIN', '.domain.com'); //replace with the 1st website URL define('COOKIEPATH', '/'); 

Solutions Collecting From Web of "Wie teilen Sie WordPress Session und Cookies zwischen Domain und Subdomain?"

Ich überspringe Schritte im Zusammenhang mit der Freigabe von DB und der Freigabe von Benutzerdaten und Meta, basierend auf der Annahme, dass Sie es richtig gemacht haben.

Konzentrieren wir uns auf wp-config.php beider Seiten. Diese sind definiert, die für beide Standorte IDENTICAL sein müssen :

 define('COOKIE_DOMAIN', '.domain.com'); // your main domain define('COOKIEPATH', '/'); define('COOKIEHASH', md5('domain.com'); // notice absence of a '.' in front 

und

nur einmal erzeugt, KEYs und SALTs, kopiert in wp-config.php beider Seiten.

Wenn Sie sich jetzt als Benutzer auf einer Website anmelden, werden Sie als derselbe Benutzer auf der zweiten Site angemeldet.

Aber warte. Was passiert, wenn Sie einen neuen Benutzer auf einer Website erstellen, sich als neu erstellter Benutzer auf derselben Website anmelden und versuchen, auf / wp-admin / von der zweiten Website zuzugreifen? Sie können erwarten, die folgende Nachricht zu sehen:

 Sorry, you are not allowed to access this page. 

Dies liegt daran, dass der neu erstellte Benutzer auf der zweiten Site noch keine Rolle zugewiesen hat.

Wie kann verhindert werden, dass Benutzer auf beiden Websites synchronisiert werden, wenn der Benutzer ein Benutzerprofil erstellt oder ändert?

Ich habe ein Plugin geschrieben, das in / wp-content / mu-plugins von beiden Seiten platziert werden sollte. Lassen Sie uns eine neue Datei fpw-sync-users.php mit dem folgenden Code erstellen:

 < ?php // Users synchronization function fpw_synchronize_admins_on_admin_login( $user_login, $user ) { if ( array_key_exists( 'administrator', $user->caps ) ) { global $wpdb; $site_prefix = $wpdb->prefix; $admins_only = true; $other_prefixes = array( 'wp_', ); $args = array( 'fields' => 'ID', ); if ( $admins_only ) $args[ 'role' ] = 'administrator'; $users = get_users( $args ); foreach ( $users as $id ) { $cap = get_user_meta( $id, $site_prefix . 'capabilities', true ); foreach ( $other_prefixes as $prefix ) update_user_meta( $id, $prefix . 'capabilities', $cap ); } } } add_action( 'wp_login', 'fpw_synchronize_admins_on_admin_login', 10, 2 ); function fpw_synchronize_user_on_admin_register( $id ) { $me = wp_get_current_user(); if ( array_key_exists( 'administrator', $me->caps ) ) { $other_prefixes = array( 'wp_', ); $user = get_user_by( 'id', $id ); $cap = $user->caps; foreach ( $other_prefixes as $prefix ) update_user_meta( $id, $prefix . 'capabilities', $cap ); } } add_action( 'user_register', 'fpw_synchronize_user_on_admin_register', 10, 1 ); function fpw_synchronize_user_on_profile_update( $user_id ) { if ( current_user_can( 'edit_user', $user_id ) ) { $other_prefixes = array( 'wp_', ); $cap = array( $_POST[ 'role' ] => true, ); foreach ( $other_prefixes as $prefix ) update_user_meta( $user_id, $prefix . 'capabilities', $cap ); } } add_action('edit_user_profile_update', 'fpw_synchronize_user_on_profile_update'); 

und kopiere es auf beide Ziele.

Bearbeiten Sie nun das Plugin der ersten Site, indem Sie in allen drei $other_prefixes Arrays ‘wp_’ durch das echte Tabellenpräfix der zweiten Site $other_prefixes . Bearbeiten Sie das Plugin der zweiten Seite mit dem reellen Tabellenpräfix der ersten Site als Ersatz.

Von jetzt an werden die Benutzer auf beiden Seiten vollständig synchronisiert, und die Anmeldung auf einer Website macht diesen Benutzer auf beiden Seiten angemeldet.