Single Sign On sta per autenticazione unica su più sistemi. Nel nostro caso con un unico login è possibile accedere a più installazioni di WordPress.
Capita infatti che ci si trovi a dover gestire più installazioni, per suddivedere sezioni dello stesso sito ad esempio. E si vorrebbe che gli utenti non debbano nè registrarsi più volte nè tantomeno loggarsi nuovamente su ogni installazione.
E’ da dire che per gestire più installazioni di WordPress ci sono anche altri sistemi, tra i quali WordPress MU, progetto degli stessi sviluppatori di WordPress, nato per consentire la gestione di un network di blog, oppure alcuni plugin per WordPress come WP Hive, che permette di gestire più blog che condividono file, plugin e temi.
Tuttavia se non avete intenzione di mettere su decine di blog ma unicamente di permettere agli utenti di accedere con un singolo login ai vostri blog ecco come fare.
Bisogna prima di ogni cosa procedere alle varie installazioni. Attenzione però. Tutte le installazioni devono essere fatte sullo stesso database. Per evitare di sovrascrivere le tabelle è necessario cambiarne il prefisso. Il file da modificare in questo caso è il file config.php
Alla riga
$table_prefix = ‘wp_’;
sostituiamo
$table_prefix = 'wp_';
per il blog X e
$table_prefix = 'wpy_';
per il blog Y e così via
Poi bisogna fare in modo che gli utenti del blog X siano gli stessi del blog Y e di tutti gli altri. Se creiamo un utente su X sarà automaticamente anche un utente di Y.
Sempre nel file config.php sotto la riga
/* That's all, stop editing! Happy blogging. */ aggiungiamo
define('CUSTOM_CAPABILITIES_PREFIX', 'wp_');
per fare in modo che un utente abbia gli stessi diritti in tutti i blog.
Apriamo poi il file wp-includes/capabilities.php di tutti i nostri blog, cerchiamo:
$this->cap_key = $wpdb->prefix . 'capabilities';
e sostituiamo con
if (defined ('CUSTOM_CAPABILITIES_PREFIX')) {
$this->cap_key = CUSTOM_CAPABILITIES_PREFIX . 'capabilities';
}
else { $this->cap_key = $wpdb->prefix . 'capabilities';
}
Affinchè i nostri blog condividano le stesse tabelle per la memorizzazione degli utenti, aggiungiamo sotto la riga /* That's all, stop editing! Happy blogging. */ nel file config.php del secondo blog e dei successivi le righe:
define ('WPLANG', '');
define('CUSTOM_USER_TABLE', 'wp_users');
define('CUSTOM_USER_META_TABLE', 'wp_usermeta');
A questo punto abbiamo degli utenti che possono accedere ai nostri blog con gli stessi username e password. WordPress riconosce l’ autenticazione di un utente attraverso i cookies. Per fare in modo che un utente loggato nel blog X sia riconosciuto come loggato anche in tutti gli altri blog occorre ancora qualche modifica.
Cosa importantissima è che le versioni siano le stesse. Poi inseriamo nel file config.php di tutte le versioni le righe:
define('AUTH_KEY', 'vostra_key_auth');
define('SECURE_AUTH_KEY', 'vostra_key_secure');
define('LOGGED_IN_KEY', 'vostra_key_logged');
define('NONCE_KEY', 'vostra_key_Nonce');
define('AUTH_SALT', 'vostra_key_salt');
define('USER_COOKIE', 'quello_che_vuoi_');
define('PASS_COOKIE', 'quello_che_vuoi_');
define('AUTH_COOKIE', 'quello_che_vuoi_');
define('SECURE_AUTH_COOKIE', 'quello_che_vuoi_');
define('LOGGED_IN_COOKIE', 'quello_che_vuoi_');
define('TEST_COOKIE', 'quello_che_vuoi');
A questo punto tutto dovrebbe funzionare. A me funziona tutto con WordPress 2.8, ma credo che vada bene anche per le versioni precedenti.