Convierta una instalación de WordPress multisitio en un solo sitio


17

Dada una red de WordPress Multisite, con un blog principal, y suponiendo que todo el contenido se haya trasladado a ese blog, ¿cómo se colapsaría la red en una instalación estándar de WordPress sin red y sin multisite?


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

Creo que una mejor manera de expresarlo sería extraer un solo sitio de una red. El colapso de una red solo funcionaría realmente en el sitio principal, no en ninguno creado en él.
sanchothefat

Respuestas:


17

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

  1. Configure una copia limpia de WP pero no la instale
  2. Encuentra la ID del sitio
  3. Copie los archivos de blogs.dir / ID / files a la nueva carpeta de carga de WP
  4. Copie el tema que usa el sitio y cualquier complemento que use en las carpetas apropiadas en la nueva carpeta wp-content
  5. Haga una copia de seguridad de la base de datos multisitio, pero solo las tablas para el sitio de destino y las tablas de usuarios y metas de usuario utilizando MySQL workbench o equivalente
  6. Restaure la copia de seguridad en una nueva base de datos y cambie los prefijos de nombre de tabla para que sean todos iguales, por ejemplo 'wp_SITEID_' a 'wp_'
  7. Usando MySQL workbench o buscador de consultas, ordena los usuarios y las tablas de usermeta de esta manera:
    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. Comience el proceso de instalación de WP para crear un wp-config.phppero no haga clic en "Ejecutar la instalación"
  9. Cree un archivo .htaccess predeterminado si los enlaces permanentes estaban en uso o simplemente visite la página de enlaces permanentes en wp-admin
  10. A continuación, deberá actualizar las URL antiguas de su base de datos. Idealmente, use una herramienta segura de búsqueda / reemplazo como la de wp-cli o su precursor de propósito general de búsqueda / reemplazo de db por interconexión / it . Específicamente reemplace blogs.dir/SITE_ID/filescon uploads, y si está cambiando la URL de su sitio, busque oldsite.comy reemplace con newsite.com.

Un poco de esfuerzo y debes tener cuidado con las ediciones de la base de datos, pero eso es lo único que puedo ver para extraer un solo sitio de un multisitio existente con todas sus configuraciones, etc ... intactas.

EDITAR:

Como lo vio @Jake, olvidé mencionar los pasos finales que puede necesitar, por ejemplo. búsqueda / reemplazo de URL antiguas. He actualizado la lista en consecuencia.


Nada en el paso 7 funcionó o tuvo algún efecto cuando cambié SITEID a la identificación correcta del sitio. En lugar de eso, se debe mencionar que los siteurly homeprobablemente necesitarán opciones que se actualizará en la wp_optionstabla. El resto de esto fue una muy buena lista de verificación. Gracias.
Jake

Es probable que también deba buscar y reemplazar en la base de datos el dominio antiguo / dominio nuevo si cambia. Y casi DEFINITIVAMENTE necesitará buscar y reemplazar blogs.dir o cargas / sitios para asegurarse de que los enlaces a las imágenes / archivos sean correctos. Sin embargo, tenga cuidado con todos los datos serializados en WP. No es muy seguro ejecutar una búsqueda abierta y reemplazarla en MYSQL. Use algo como: interconnectit.com/products/…
Jake

@Jake, gracias, olvidé el contexto de cambiar la URL y tienes razón, me perdí el paso de búsqueda / reemplazo de las URL existentes, agregando eso en aras de la integridad
sanchothefat

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

Comprendí lo que hicieron, solo la primera pareja me devolvió errores, pero tal vez me faltaba algo, y no estoy seguro de tener algún usuario que limpiar, por lo que fue fácil omitirlo de todos modos. Y no me malinterpreten, esto fue extremadamente útil sin esas otras cosas, solo es bueno tenerlo en cuenta para su uso futuro. ¡Gracias!
Jake

5

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

  1. Crear una copia de seguridad, volcado de base de datos y copia de seguridad de archivos de contenido de wp
  2. Establezca constante WP_ALLOW_MULTISITEen su wp-config.php aFALSE
  3. Elimine o comente la configuración de MU de wp-config.phpesta manera:

    /**
    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. Elimine la configuración MU de .htaccess, como la fuente a continuación:

    # BEGIN WordPress
    RewriteEngine On
    RewriteBase /wordpress/
    RewriteRule ^index\.php$ - [L]
    
    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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
  5. Cree los enlaces permanentes nuevos, en el backend wp-admin/options-permalink.phpy tal vez copie el resultado en .htaccess, si no es posible para WP, derechos para escribir en este archivo.

  6. Eliminar entradas no útiles en la tabla users; use la siguiente instrucción sql en una herramienta, como phpMyAdmin o Adminer

    `ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
  7. Las siguientes tablas se pueden descartar:

    • wp_blogs
    • wp_blog_versions
    • wp_registration_log
    • wp_signups
    • wp_site
    • wp_sitemeta
    • wp_sitecategories (solo, si existe)

    (cambie wp_a su prefijo de base de datos)

  8. Ahora solo tiene las últimas tablas de otros blogs de la red. Si va a usar también este contenido, exporte esto antes a través de WordPress export como XML e importe ahora en la instalación simple limpia.


1
Esta es una buena respuesta, pero, he aceptado la de @sanchothefat, ya que la suya se puede usar para extraer cualquier sitio independientemente de su ID, mientras que sus instrucciones me darían el sitio raíz
Tom J Nowell

1

En realidad es posible y bastante fácil de hacer; Lo he hecho varias veces.

Hay cosas a tener en cuenta.

  1. wp-config.php que define si un sitio múltiple o un sitio único
  2. .htaccess que contiene las reglas de reescritura para admitir sitios múltiples
  3. las tablas adicionales creadas para admitir sitios múltiples

Al comentar la definición de múltiples sitios (?) En wp-config y actualizar sus enlaces permanentes, el sitio volverá al sitio único / modo predeterminado. Entonces todo lo que tiene que hacer es limpiar su base de datos.

Si por alguna razón no puede acceder a su wp-admin para actualizar los enlaces permanentes, simplemente elimine su archivo .htaccess. WordPress lo recreará para usted en modo de sitio único.

Haré todo lo posible para encontrar el enlace al código / artículo de soporte y actualizar la respuesta con él.

Aquí hay un enlace a un elemento en el foro de soporte http://wordpress.org/support/topic/revert-to-single-site


0

Los procesos básicos aquí funcionan bien incluso en WP 3.5.1 Una aclaración: si nombraste algo a tu subsitio, tendrás que cambiar los enlaces en la base de datos para eliminar ese nombre. Si mi subsitio se llamaba ... mysite.com/comics, luego de seguir los procedimientos anteriores, su WP buscará mysite.com/comics y obtendrá errores en los enlaces permanentes. Edite la tabla WP-OPTIONS buscando la extensión / comics y elimínela. Además, verifique que el directorio Uploads esté apuntando a la ubicación correcta; aún puede mostrar una entrada de blogs.dir y ahora debería apuntar a wp-content / uploads /


¿Puede editar esto para que sea una respuesta independiente? Parece que debería ser un comentario sobre una de las otras respuestas.
s_ha_dum

0

El punto muy importante que no debe perderse, y se habla menos, es que aún debe tener la línea:

define( 'WP_ALLOW_MULTISITE',...

Pero debe cambiarse actualizado a

define( 'WP_ALLOW_MULTISITE', 0 );

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.