Cómo convertir una instalación Multisite de WordPress en un sitio único
Dada una red Multisite de WordPress, con un blog principal, y asumiendo que todo el contenido ha sido movido a ese blog, ¿cómo se podría colapsar la red para convertirla en una instalación estándar de WordPress no multisite?

He seguido los pasos para extraer un sitio de una instalación multisitio a una instancia única:
- Configurar una copia limpia de WP pero no instalarla
- Encontrar el ID del sitio
- Copiar los archivos de blogs.dir/ID/files a la nueva carpeta de uploads de WP
- Copiar el tema que usa el sitio y cualquier plugin que utilice a las carpetas correspondientes en la nueva carpeta wp-content
- Hacer una copia de seguridad de la base de datos multisitio pero solo de las tablas del sitio objetivo y las tablas de usuarios y usermeta usando MySQL Workbench o equivalente
- Restaurar la copia de seguridad en una nueva base de datos y cambiar los prefijos de las tablas para que sean todos iguales, ej. 'wp_SITEID_' a 'wp_'
- Usando MySQL Workbench o un navegador de consultas, limpiar las tablas de usuarios y usermeta así:
DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
- Iniciar el proceso de instalación de WP para crear un
wp-config.php
pero no hacer clic en 'Ejecutar la instalación' - Crear un archivo .htaccess predeterminado si se usaban enlaces permanentes o simplemente visitar la página de enlaces permanentes en wp-admin
- Necesitarás actualizar cualquier URL antigua en tu base de datos. Idealmente usa una herramienta segura de búsqueda/reemplazo como la de wp-cli o su predecesor de propósito general search/replace db by interconnect/it. Específicamente reemplaza
blogs.dir/SITE_ID/files
conuploads
, y si estás cambiando la URL de tu sitio, buscaoldsite.com
y reemplázala connewsite.com
.
Requiere bastante esfuerzo y hay que tener cuidado con las ediciones de la base de datos, pero es la única forma que veo de extraer un sitio único de un multisitio existente con todas sus configuraciones, etc... intactas.
EDITADO:
Como señaló @Jake, olvidé mencionar los pasos finales que podrías necesitar, como buscar/reemplazar URLs antiguas. He actualizado la lista en consecuencia.

Nada en el paso 7 funcionó o tuvo algún efecto cuando cambié SITEID
por el ID de sitio correcto. En lugar de eso, deberías mencionar que las opciones siteurl
y home
probablemente necesitarán ser actualizadas en la tabla wp_options
. El resto de esta lista de verificación fue bastante buena. Gracias.

También probablemente será necesario hacer una búsqueda y reemplazo en la base de datos para el dominio antiguo/nuevo si se está cambiando. Y casi DEFINITIVAMENTE será necesario hacer una búsqueda y reemplazo para blogs.dir o uploads/sites para asegurarse de que los enlaces a imágenes/archivos sean correctos. Sin embargo, ten cuidado con todos los datos serializados en WP. No es muy seguro ejecutar una búsqueda y reemplazo abierta en MYSQL. Usa algo como: http://interconnectit.com/products/search-and-replace-for-wordpress-databases/

@Jake gracias, olvidé el contexto de cambiar la URL y tienes razón, me salté el paso de buscar/reemplazar para las URLs existentes, lo agrego por el bien de la completitud

@Jake No entré en detalles, pero el paso 7 básicamente elimina a los usuarios que no pertenecen al sitio del que estás extrayendo y se asegura de que aún tengan los permisos correctos. Es una tarea de limpieza realmente.

Entendí lo que hicieron, solo que los primeros me devolvieron errores, pero tal vez me faltaba algo, y no estoy seguro de tener usuarios para limpiar, así que fue fácil saltarlo de todos modos. Y no me malinterpretes, esto fue extremadamente útil sin esas otras cosas, solo es bueno tenerlo en cuenta para usos futuros. ¡Gracias!

Es posible eliminar la instalación multisitio sin reinstalar un nuevo blog. Sigue estos pasos.
- Crea una copia de seguridad, un volcado de la base de datos y una copia de seguridad de los archivos de wp-content
- Establece la constante
WP_ALLOW_MULTISITE
en tu wp-config.php aFALSE
Elimina o comenta las configuraciones MU en
wp-config.php
, así:/** define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', false ); $base = '/wordpress/'; define( 'DOMAIN_CURRENT_SITE', 'localhost' ); define( 'PATH_CURRENT_SITE', '/wordpress/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', 1 ); */
Elimina las configuraciones MU de
.htaccess
, como en el código fuente a continuación:# BEGIN WordPress RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] # archivos subidos RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L] # añadir una barra diagonal al final de /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
Crea los nuevos enlaces permanentes, en el backend
wp-admin/options-permalink.php
y tal vez copia el resultado en.htaccess
, si no es posible para WP, los permisos para escribir en este archivo.Elimina las entradas innecesarias en la tabla
users
; usa la siguiente sentencia SQL en una herramienta, como phpMyAdmin o Adminer`ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
Las siguientes tablas pueden eliminarse:
- wp_blogs
- wp_blog_versions
- wp_registration_log
- wp_signups
- wp_site
- wp_sitemeta
- wp_sitecategories (solo si existe)
(cambia
wp_
por tu prefijo de base de datos)Ahora solo tienes las últimas tablas de otros blogs de la red. Si también quieres usar este contenido, entonces expórtalo antes mediante la exportación de WordPress como XML e impórtalo ahora en la instalación única limpia.

De hecho, es posible y bastante fácil de hacer; lo he hecho yo mismo varias veces.
Hay tres cosas que considerar.
- wp-config.php que define si es multisitio o sitio único
- .htaccess que contiene las reglas de reescritura para soportar multisitio
- las tablas adicionales creadas para soportar multisitio
Comentar la definición de multisitio define(?) en wp-config y actualizar tus enlaces permanentes revertirá el sitio al modo de sitio único/por defecto. Luego solo tienes que limpiar tu base de datos.
Si por alguna razón no puedes acceder a tu wp-admin para actualizar los enlaces permanentes, simplemente elimina tu archivo .htaccess. WordPress lo recreará por ti en modo de sitio único.
Haré lo posible por encontrar el enlace a los códigos/artículo de soporte y actualizaré la respuesta con él.
Aquí hay un enlace a un tema en el foro de soporte http://wordpress.org/support/topic/revert-to-single-site (Revertir a sitio único)

Los procesos básicos aquí funcionan bien incluso en WP 3.5.1 Una aclaración: Si nombraste tu subsitio de alguna manera, tendrás que cambiar los enlaces en la base de datos para eliminar ese nombre. Si mi subsitio se llamaba... misitio.com/comics, después de seguir los procedimientos anteriores, tu WP buscará misitio.com/comics y obtendrá errores en los enlaces permanentes. Edita la tabla WP-OPTIONS buscando la extensión /comics y elimínala. Además, verifica que el directorio de Subidas (Uploads) apunte a la ubicación correcta - puede que todavía muestre una entrada blogs.dir y ahora debería apuntar a wp-content/uploads/
