Cómo convertir una instalación Multisite de WordPress en un sitio único

8 ago 2011, 13:14:30
Vistas: 12.8K
Votos: 19

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?

2
Comentarios

Encontré dos enlaces útiles a continuación, esto ES posible. Encontré información útil aquí: http://wpmututorials.com/how-to/how-to-disable-multisite/ y aquí: http://wordpress.org/support/topic/wordpress-mu-multisite-wordpress-single-wordpress-instance Veremos cómo resulta.

User User
28 mar 2012 01:20:59

Creo que una mejor forma de expresarlo sería extraer un solo sitio de una red. Revertir una red solo funcionaría realmente para el sitio principal, no para cualquiera que haya sido creado en él.

sanchothefat sanchothefat
3 ene 2013 13:06:55
Todas las respuestas a la pregunta 5
5
19

He seguido los pasos para extraer un sitio de una instalación multisitio a una instancia única:

  1. Configurar una copia limpia de WP pero no instalarla
  2. Encontrar el ID del sitio
  3. Copiar los archivos de blogs.dir/ID/files a la nueva carpeta de uploads de WP
  4. Copiar el tema que usa el sitio y cualquier plugin que utilice a las carpetas correspondientes en la nueva carpeta wp-content
  5. 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
  6. 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_'
  7. Usando MySQL Workbench o un navegador de consultas, limpiar las tablas de usuarios y usermeta así:
    1. DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
    2. DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
    3. UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
    4. UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
  8. Iniciar el proceso de instalación de WP para crear un wp-config.php pero no hacer clic en 'Ejecutar la instalación'
  9. Crear un archivo .htaccess predeterminado si se usaban enlaces permanentes o simplemente visitar la página de enlaces permanentes en wp-admin
  10. 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 con uploads, y si estás cambiando la URL de tu sitio, busca oldsite.com y reemplázala con newsite.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.

3 ene 2013 13:05:41
Comentarios

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.

Jake Jake
2 dic 2013 03:31:11

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 Jake
2 dic 2013 03:40:38

@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

sanchothefat sanchothefat
2 dic 2013 15:35:13

@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.

sanchothefat sanchothefat
2 dic 2013 15:45:28

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!

Jake Jake
2 dic 2013 17:29:26
1

Es posible eliminar la instalación multisitio sin reinstalar un nuevo blog. Sigue estos pasos.

  1. Crea una copia de seguridad, un volcado de la base de datos y una copia de seguridad de los archivos de wp-content
  2. Establece la constante WP_ALLOW_MULTISITE en tu wp-config.php a FALSE
  3. 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 );
    */
    
  4. 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
    
  5. 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.

  6. 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`;`
    
  7. 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)

  8. 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.

3 ene 2013 14:47:40
Comentarios

Esta es una buena respuesta, pero he aceptado la de @sanchothefat porque puede usarse para extraer cualquier sitio sin importar el ID, mientras que tus instrucciones me darían el sitio raíz

Tom J Nowell Tom J Nowell
3 ene 2013 15:08:49
0

De hecho, es posible y bastante fácil de hacer; lo he hecho yo mismo varias veces.

Hay tres cosas que considerar.

  1. wp-config.php que define si es multisitio o sitio único
  2. .htaccess que contiene las reglas de reescritura para soportar multisitio
  3. 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)

6 nov 2012 18:06:58
1

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/

12 mar 2013 20:50:50
Comentarios

¿Puedes editar esto para que sea una respuesta independiente? Parece que debería ser un comentario en alguna de las otras respuestas.

s_ha_dum s_ha_dum
12 mar 2013 21:29:53
0

El punto muy importante que no debe pasarse por alto, y del que se habla menos, es que aún debes tener la línea:

define( 'WP_ALLOW_MULTISITE',...

Pero debe actualizarse a:

define( 'WP_ALLOW_MULTISITE', 0 );

22 ago 2014 22:22:44