Come Effettuare il Login Una Volta per Tutta la Rete WP Multisite
Questo riguarda il dominio dei cookie. È impostato per ogni dominio, il che impedisce accessi condivisi su tutta la rete. Puoi provare a impostare la costante COOKIE_DOMAIN
nel tuo file wp-config.php
.
Ad esempio, impostandola vuota, in modo che WordPress non modifichi il dominio del cookie per ogni sito:
define( 'COOKIE_DOMAIN', '' );
Potrebbe essere necessario impostare anche altre costanti per farlo funzionare.
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '' );
define( 'SITECOOKIEPATH', '' );
Non chiedermi degli svantaggi, perché non ne sono completamente sicuro.
Oppure puoi impostare un dominio specifico per i cookie su tutti i siti:
define( 'COOKIE_DOMAIN', 'example.com' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );
Probabilmente è una buona idea impostare anche un hash univoco per i cookie:
define( 'COOKIEHASH', 'unique_cookie_hash_string' );
Nel caso in cui tu abbia altre installazioni di WordPress che utilizzano lo stesso dominio per i cookie.
Aggiornamento:
Dalla pagina GitHub di WP Multi Network ho trovato questo:
Single Sign-on
Aggiungi qualcosa di simile nel tuo
wp-config.php
per condividere i cookie su tutti i siti e le reti.
// Cookies
define( 'COOKIEHASH', md5( 'yourdomain.com' ) );
define( 'COOKIE_DOMAIN', 'yourdomain.com' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );
define( 'TEST_COOKIE', 'thing_test_cookie' );
define( 'AUTH_COOKIE', 'thing_' . COOKIEHASH );
define( 'USER_COOKIE', 'thing_user_' . COOKIEHASH );
define( 'PASS_COOKIE', 'thing_pass_' . COOKIEHASH );
define( 'SECURE_AUTH_COOKIE', 'thing_sec_' . COOKIEHASH );
define( 'LOGGED_IN_COOKIE', 'thing_logged_in' . COOKIEHASH );
A giudicare dal codice, si tratta di funzionalità generiche di WordPress, non specifiche del plugin, quindi vale la pena provare. Potrebbe essere che finora non abbiamo fatto abbastanza.

Non ha funzionato @ialocin. Ho effettuato l'accesso alla mia rete WP Core/Base. Poi, quando ho cambiato rete, mi è stata nuovamente presentata la schermata di login.

Peccato, ho aggiunto alcune informazioni aggiuntive alla mia risposta. Spero che ti aiutino, perché altrimenti personalmente non posso dirti di più. Il resto devi provarlo e fare ricerche da solo. @tammy

Test #1 (codice sotto) -- questo non ha funzionato. Ho effettuato l'accesso con successo alla rete principale/core come Super Admin. Poi, quando ho cambiato rete, mi è stata presentata la schermata di login.
define('COOKIE_DOMAIN', '');
define('ADMIN_COOKIE_PATH', '/');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');

Test #2 (codice sotto) -- anche questo non ha funzionato. Ho effettuato l'accesso con successo alla rete principale/core come Super Admin. Poi, quando ho cambiato rete, mi è stata presentata la schermata di login.
define('COOKIE_DOMAIN', 'my-main-wp-network-site.com');
define('ADMIN_COOKIE_PATH', '/');
define('COOKIEPATH', '/');
define('SITECOOKIEPATH', '/');

Probabilmente cercherò di scrivere il mio plugin per ottenere questo risultato.

Lo farò @ialocin. Ti farò sapere quando avrò scritto e testato un plugin. Al momento non è una priorità, quindi potrebbero volerci alcune settimane prima che possa occuparmene.

sono 2 reti WP diverse? O 1 rete di siti che funzionano da 1 code base?

Attualmente ho più di una dozzina di reti, ognuna con 1 sito all'interno @AlexOlder. Il Super Admin ha accesso a ogni singola rete nella mia installazione WP. Quindi voglio solo accedere a WP 1 volta - cioè, per ogni singola rete oggi, domani e in futuro. Spero che questo chiarisca.

@tammy non lo fa. Se hai una dozzina di configurazioni di rete diverse, non esiste un modo sicuro per accedere a tutte contemporaneamente.
Se si tratta di una dozzina di siti su 1 installazione WP, quando effettui l'accesso dovresti essere loggato attraverso una singola rete.

Esatto @AlexOlder -- da qui la necessità per me di scrivere il mio plugin. Grazie. Se lo scrivi come risposta... la selezionerò per chiudere questa discussione.

@tammy non funziona così. Se hai una dozzina di configurazioni di rete diverse non esiste un modo sicuro per accedere a tutte contemporaneamente. Se si tratta di una dozzina di siti su una singola installazione WP, quando effettui il login dovresti essere autenticato su tutta la rete.
– Alex Older, 5 ago alle 10:35

A partire da WordPress 4.2.4, un'installazione multisito standard con il plugin MU Domain Mapping 0.5.5 Development e il plugin Multisite User Management 1.1, effettuando il login attraverso il dominio principale, un utente verrà autenticato su tutti i siti a cui è assegnato (tutti i siti come utente super admin). Tuttavia, l'utente deve visitare un sito secondario per stabilire il cookie e l'autenticazione, cosa che avverrà automaticamente. Fortunatamente, è possibile includere una soluzione alternativa per disconnettere l'utente da tutti i siti se è stato visitato qualsiasi sito secondario durante l'autenticazione sul dominio principale. Attualmente ho riscontrato che non esegue la disconnessione da tutti i siti per impostazione predefinita. Ecco cosa puoi aggiungere al tuo file functions.php nel tema, che distruggerà le sessioni dell'utente su tutta la rete durante il logout:
function clear_session_on_logout() {
$current_user = wp_get_current_user();
// ottieni tutte le sessioni per l'utente con ID $user_id
$sessions = WP_Session_Tokens::get_instance($current_user->ID);
// abbiamo ottenuto le sessioni, distruggile tutte!
$sessions->destroy_all();
}
add_action('clear_auth_cookie', 'clear_session_on_logout');
È anche una buona idea aggiornare il tema utilizzato in tutta la rete o i temi utilizzati nei siti secondari per effettuare il login e il logout utilizzando la directory wp-admin/ del dominio principale. Tuttavia, se richiedi che l'utente esegua il logout da ogni sito secondario "se visitato" mentre è connesso al dominio principale, allora l'hook di logout predefinito sarà sufficiente.
Nota: Se accedi a un sito secondario con un account Super Admin, non verrai autenticato su tutti i siti. Penso che sia una scelta progettuale, e una soluzione semplice consiste nel modificare il tema per utilizzare sempre il dominio principale per il login e il logout. Se preferisci reindirizzare nuovamente al dominio secondario durante il login e il logout, è possibile implementare anche un semplice hook per questo scopo.

Ho anche trovato fastidioso il menu a discesa predefinito "I miei siti" nella barra di amministrazione di wp-admin, che ti indirizza alla pagina wp-admin/ del sito figlio, costringendo qualsiasi utente (incluso il super amministratore) a effettuare nuovamente il login sul sito figlio anche se già autenticato sul dominio principale (strano). Se visiti qualsiasi altra pagina diversa dalla directory wp-admin/ di un sito figlio, un utente verrà autenticato automaticamente e la barra di amministrazione apparirà. Una semplice correzione nella barra di amministrazione consiste nel modificare i collegamenti nel menu a discesa in modo che puntino a site_url(); del sito figlio.

Grazie @ZachGoldsmith per il tuo intervento. Sto cercando un single sign-on per tutte le mie reti
...non solo per i siti
all'interno di ogni rete
. Quindi ho iniziato a scrivere il mio sistema di login per ottenere questo risultato, poiché non sembra esistere una soluzione già pronta che lo faccia.
