En algunas ocasiones necesitamos sacar uno de los sitios de un WordPres MultiSite a un sitio normal, una instalación simple. El proceso no es automático aunque hay algunas herramientas que lo permiten.
Herramientas como Duplicator Pro permiten hacer una copia de todo el sitio y al recuperarlo, poder elegir sólo uno de ellos para restaurar.
Pero en la mayoría de casos no se tienen herramientas externas, por lo que se puede realizar un proceso paso a paso de migración.
Preparación
Lo primero que hemos de saber es el ID del sitio que vamos a querer separar. Esto lo podemos conseguir en la lista de Sitios del WordPress MultiSite. En este ejemplo vamos a usar el ID número 2.
La base de datos
Si accedemos a un panel del estilo a phpMyAdmin, deberemos exportar las tablas que comienzan con el prefijo que tengamos, seguido de 2_
. Las tablas tendrán una apariencia del estilo a wp_2_comments
.
Además de estas tablas deberemos seleccionar las tablas que afectan a los usuarios, que son wp_users
y wp_usersmeta
.
Cuando tengamos el fichero .SQL deberemos sustituir todos los nombres de las tablas. La idea es quitar el 2_
de todos los sitios. Como esto puede afectar a muchas cosas, haremos una sustitución de wp_2_
por wp_
.
Ahora que ya tenemos el fichero SQL deberemos importarlo en el nuevo sitio. Deberemos tener una base de datos creada pero no el sitio o el WordPress instalado, es decir, ha de estar vacía.
Los ficheros
Para el nuevo sitio podemos descargar la última versión de WordPress y subirla al servidor.
Ahora que tenemos los ficheros base, deberemos copiar del sitio de origen algunas cosas del /wp-content/
.
Por un lado deberemos copiar los plugins activos, por otro los themes que estemos usando y finalmente los ficheros.
De los ficheros subidos deberemos buscar la carpeta /wp-content/uploads/sites/2/
(donde 2 sería el ID) y lo copiaremos a /wp-content/uploads/
.
La configuración
Ahora que tenemos la base de datos al punto, y los ficheros donde toca, hemos de hacer algunos cambios en el wp-config.php
.
Lo mejor es copiar el fichero original de la base de datos y hacer los cambios sobre él. Como es habitual, hemos de cambiar los datos de conexión a la base de datos: DB_NAME
, DB_USER
y DB_PASSWORD
.
Como siguiente punto hay que deshacer toda la configuración del WordPress MultiSite.
Todo el código, que debe ser similar a este:
define( 'WP_ALLOW_MULTISITE', true );
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'example.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
Esto lo debemos sustituir por
define( 'WP_ALLOW_MULTISITE', false );
Además, para corregir posibles enlaces internos que no sean correctos, estableceremos las direcciones por efecto, añadiendo al WP-Config la URL de nuestro nuevo sitio:
define( 'WP_SITEURL', 'https://www.example.com' );
define( 'WP_HOME', 'https://www.example.com' );
También deberemos recuperar la configuración inicial simple del .htaccess (o la configuración del nginx).
Por defecto encontraremos algo del estilo a:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress
Y lo sustituiremos por el código inicial:
# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Accediendo
En este momento, si todo ha ido bien, el sitio debería funciona correctamente para acceder al panel. Aunque quedan un par de configuraciones.
Sustitución de los media
Antes de acabar deberemos sustituir las direcciones URL de las imágenes y Media en general por las nuevas direcciones. Para ello podemos usar el sistema de sustitución de WP-CLI, o podemos instalar un plugin de sustitución.
La sustitución debe ser de:
/uploads/sites/2/
Donde el número 2 será el del ID del sitio original. Lo sustituiremos simplemente por:
/uploads/
De la misma forma deberemos hacer la sustitución de todo el sitio. Por ejemplo, sustituyendo la dirección antigua:
//old.example.com/es/
Por la nueva dirección.
//www.example.com/
Enlaces permanentes
Como último paso, iremos a la Configuración de Enlaces Permanentes y pulsaremos en Guardar.
Y con esto acabaríamos la migración de un sitio MultiSitio a un sitio Sencillo.
Sobre este documento
Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.
Una vez realizado los pasos no me dejaba entrar a la administración. Tuve que ir a las tablas «options» y «usermeta» para quitar sustituir «wp_2» por «wp_».
Aquí lo explica: https://www.bufa.es/wordpress-solucion-lo-siento-no-tienes-permisos-para-acceder-a-esta-pagina/ por si al alguien más le pasa.