Modificare il prefisso tabella in WordPress

Modificare il prefisso tabella in WordPress

Attenzione: la procedura illustrata in questo articolo può causare morte e distruzione. Raccomando la massima prudenza, di provarla prima in un ambiente di test e, in ogni caso, di fare un backup completo del sito. Non mi assumo responsabilità per eventuali danni provocati dalle informazioni riportate.

Cos’è il prefisso tabella

Il prefisso tabella è la stringa che viene posta prima del nome in tutte le tabelle create nel database di WordPress.

Il prefisso e il nome tabella sono separati da un _ (underscore). Ad esempio: wp_options.

Il prefisso può contenere solo lettere minuscole, lettere maiuscole e numeri. L’unico carattere speciale consentito è _.

A cosa serve

Il prefisso tabella è utile nel caso in cui si abbia la necessità di installare più istanze di WordPress all’interno di un singolo database. In questo modo, ogni sito utilizza solo le tabelle contraddistinte dal proprio prefisso e tutti possono coesistere.

Perchè cambiarlo

  • come già detto, per poter ospitare, nello stesso database, più copie di WordPress oppure un WordPress e un altro applicativo. In sostanza per raggruppare e distinguere le tabelle delle diverse entità.
  • per sicurezza: la procedura di installazione di WordPress propone sempre il prefisso wp_ e crea una serie ben nota di tabelle per il suo funzionamento. In pratica si sa esattamente il nome di tutte le tabelle che un sito WordPress contiene di default, e questo dettaglio viene utilizzato nei tentativi di attacco. Cambiare il prefisso, quindi, cambia il nome delle tabelle e rende un po’ più complicata la vita a chi tenta di “bucare” un sito.
  • per altri motivi: ovviamente ci possono essere altre ragioni. Di recente, ad esempio, ho dovuto cambiare un prefisso perchè conteneva un lettera maiuscola e questo causava problemi nella migrazione dall’ambiene di sviluppo a quello di produzione.

Come cambiarlo

Il momento migliore è in fase di installazione, quando WordPress ce ne da la possibilità. “Bella scoperta“, mi dirai.

Cambia il prefisso!!

Se invece vogliamo farlo su un sito esistente, possiamo procedere con una procedura manuale.

Supponiamo di partire da questa situazione:

Il database appartiene ad un WordPress che ho installato per l’occasione. Il prefisso tabella è quello di default e vogliamo cambiarlo in ewqxz_.

Il primo passo è modificare il prefisso nel file wp-config.php che si trova nella root:

Prima…
…dopo.

Se apri il sito adesso, ti trovi davanti alla procedura di installazione. Questo succede perchè WordPress non trova le tabelle che iniziano con il nuovo prefisso e “pensa” di trovarsi in un database vuoto. Niente paura (beh, un po’ si…).

A questo punto è necessario rinominare tutte le tabelle. Dobbiamo accedere al database con un qualunque client MySQL (phpMyAdmin o altro, in questo caso sto usando HeidiSQL).

Per rinominare le tabelle si può procedere a mano o, più velocemente, eseguire queste query:

RENAME TABLE `wp_commentmeta` TO `ewqxz_commentmeta`;
RENAME TABLE `wp_comments` TO `ewqxz_comments`;
RENAME TABLE `wp_links` TO `ewqxz_links`;
RENAME TABLE `wp_options` TO `ewqxz_options`;
RENAME TABLE `wp_postmeta` TO `ewqxz_postmeta`;
RENAME TABLE `wp_posts` TO `ewqxz_posts`;
RENAME TABLE `wp_termmeta` TO `ewqxz_termmeta`;
RENAME TABLE `wp_terms` TO `ewqxz_terms`;
RENAME TABLE `wp_term_relationships` TO `ewqxz_term_relationships`;
RENAME TABLE `wp_term_taxonomy` TO `ewqxz_term_taxonomy`;
RENAME TABLE `wp_usermeta` TO `ewqxz_usermeta`;
RENAME TABLE `wp_users` TO `ewqxz_users`;
Le tabelle rinominate.

Naturalmente queste sono le tabelle standard di WordPress, ricorda di aggiungere una query per ogni tabella appartenente al tuo sito.

L’ultimo passo è modificare alcuni valori in specifiche tabelle.

Nella tabella ewqxz_options cerca il record in cui il campo option_name contiene il valore wp_user_roles. Modifica questo valore sostituendo wp_ con il nuovo prefisso. Nel nostro esempio otteniamo:

Prima…
…dopo.

Nella tabella ewqxz_usermeta cerca tutte le righe in cui la colonna meta_key contiene un valore che inizia con il vecchio prefisso. In questo caso può essere d’aiuto eseguire una query simile a questa:

SELECT * FROM ewqxz_usermeta WHERE meta_key LIKE 'wp_%'

In tutte le righe trovate modifica il valore del campo meta_key sostituendo wp_ con il nuovo prefisso.

Se tutto è andato a buon fine, dovresti essere in grado di vedere il sito e accedere alla dashboard di WordPress.

Se dopo il login ottieni il messaggio “Non hai il permesso di accedere a questa pagina” oppure nella top bar di WordPress non trovi il link per la dashboard, significa che le modifiche non sono state applicate correttamente e WordPress non ti assegna i privilegi amministrativi.

Note finali

La procedura che ho illustrato è da ritenersi generica, in quanto applicata ad un ambiente di test costituito da un WordPress totalmente nuovo e vuoto. La presenza di contenuti e soprattutto di altri plugin può richiedere ulteriori modifiche difficili da prevedere. Un plugin, ad esempio, potrebbe avere dei riferimenti al vecchio prefisso nelle sue tabelle. Per avere un’idea della situazione, può tornare utile un comando di WP-CLI come questo:

wp db search "vecchio-prefisso" --all-tables-with-prefix

Nel caso di un sito esistente e più complesso, ti suggerisco di trasferire una copia del sito in un’area di test in cui effettuare le modifiche e verificare che tutto funzioni.

Scrivi ciò che cerchi e poi premi Invio!