Forzare installazione di WP multisite in subdirectories

Wordpress multisite

Talvolta può capitare di costruire un sito web pensando che resterà unico ma poi strada facendo rendersi conto che era meglio usare WP multisite. Non mi dilungo sui motivi che potrebbero portarvi a scegliere WP multisite: tra le tante risorse in rete potete ad esempio leggere WordPress Multisite: che cos’è e come si crea una rete di siti WP. Altro articolo ben fatto che vi consiglio di leggere è “Creare una rete di siti con WordPress multisite“.

In teoria nessun problema

Se leggete Create a Network, dal Codex, non viene detto da nessuna parte che non è possibile installare multisite anche successivamente alla creazione del primo sito ovvero quando è stato già popolato di post e pagine. E infatti è così, ma..

C’è solo un fastidioso dettaglio. Cominciate a disattivare i plugin, poi editate il file wp-config inserendo la riga di codice necessaria ad abilitare WP multisite. Fate login al vostro sito originale e troverete nel menu amministrativo una nuova voce che vi consente di iniziare il processo di configurazione del network. Ma qui, a sorpresa arriva il messaggio:

Because your install is not new, the sites in your WordPress network must use sub-domains. The main site in a sub-directory install will need to use a modified permalink structure, potentially breaking existing links.

In sostanza WordPress vi dice che poichè il vostro sito non è nuovo di zecca ma contiene già alcuni post e pagine sarete costretti a installare il network (multisite) in sottodomini e non in subdirectory.

Se a questo punto vi state chiedendo di cosa sto parlando – cosa significa installare multisite in sottodomini o in subdirectory – allora questo articolo non è per voi. Andate prima a documentarvi, per esempio al link del Codex fornito sopra. Per tutti gli altri, vi sarete resi conto che l’installazione in sottodomini o in subdirectories segue “filosofie” diverse e vi possono essere buoni motivi per una scelta o per l’altra. Anche in questo caso, per guidarvi nella scelta, vi rimando a decine di articoli presenti in rete sull’argomento.

Poniamo allora che abbiate anche voi deciso che l’installazione in subdirectories è quella che fa per voi (prima di deciderlo, leggi il paragrafo successivo). In questo caso il messaggio di WordPress che ho citato prima vi farà aggrottare le sopracciglia: e adesso? Non voglio i sottodomini ma non voglio nemmeno radere al suolo il mio primo sito solo perchè a WordPress non garba di trovarci già post e pagine.

Ma perchè quel messaggio da WordPress?

Attenzione al fatto che se WordPress dà quel messaggio, una ragione esiste. Supponiamo il vostro sito si chiami “example.it” e che vi sia un articolo o una pagina dal titolo “Dove andare”. L’URL di questa pagina, per quanto detto, sarà dunque qualcosa del tipo “https://example.it/dove-andare”. Adesso supponiamo che creiate, all’interno di WP multisite, un secondo sito (in subdirectory) e lo vogliate chiamare “Dove andare”. L’URL della home page di questo sito sarà “https://example.it/dove-andare”. Ooops, ma è identico alla pagina già esistente!

Ecco spiegato allora il motivo del messaggio prudenziale di WordPress: se nel primo sito hai già post/pagine non ti lascio installare un secondo sito in subdirectory perchè correresti il rischio di creare due URL identici, distruggendo tutti i link di entrambi i siti.

Conclusione: se scegliete di installare multisite in subdirectory, dovete essere ben sicuri che il nome del nuovo sito creato non andrà mai in conflitto con una pagina del vecchio (primo) sito.

Una soluzione ma ahimè deprecata

E’ molto probabile che dopo qualche ricerca vi imbattiate in questa soluzione, un pezzo di codice da inserire nel file functions.php del tema del vostro sito:

add_filter( 'allow_subdirectory_install',
create_function( '', 'return true;' )
);

Il problema è che si tratta di una soluzione datata e prevede l’uso della funzione “create_function” che risulta oggi deprecata in PHP 7.2.0

La strada però è quella: utilizzare il filtro WordPress “allow_subdirectory_install”. Tuttavia dovremo farlo attraverso una callback a una funzioncina scritta da noi. In questo modo:


// definisco la callback per allow_subdirectory_install
function filter_allow_subdirectory_install( $false ) {
$false=true;
return $false;
};

// aggiungo il filtro
add_filter( 'allow_subdirectory_install', 'filter_allow_subdirectory_install', 10, 1 );

Nulla di esoterico come vedete, vado semplicemente a passare il valore true al filtro allow_subdirectory_install. Il codice va inserito nel file functions.php del tema attivo nel sito originale.

A questo punto basterà fare nuovamente login al sito e cominciare l’installazione del network (dal menu Strumenti): come vedrete riapparirà la possibilità di installare il network in subdirectories invece che in sottodomini.

Raccomandazioni finali

  • prima di iniziare il processo di installazione di WP multisite, fate sempre un backup completo del bostro sito originale;
  • leggete attentamente le istruzioni presenti nel Codex e siate ben certi di essere in confidenza con le modifiche da fare nei file wp-config e htaccess;
  • al termine della installazione del network, eliminate il codice inserito nel file functons.php;
  • l’amministratore del sito originale (quello da cui siete partiti per installare il network) verrà automaticamente nominato Super-admin del network. Ricordate di aggiungere lo stesso utente anche a tutti gli altri siti del network (con ruolo admin) altrimenti non appariranno nella interfaccia grafica di amministrazione sotto “I miei Siti”.

About the Author

Carlo Bazzo
has studied Electronic Engineering at University of Padua and gained a Masters Qualifier Certification in Electronic Systems from DCU. He had been teaching Electronic Systems, Computer Science and Telecommunication courses for several years at various level in public and private colleges. Speaker about IT Security, E-Privacy and digital transformation, he is founder of Epysoft and currently working as CTO at HDEMO. @carlobazzo