Convertir une installation WordPress multisite en un site unique


17

Étant donné un réseau WordPress multisite, avec un blog principal, et en supposant que tout le contenu a été déplacé vers ce blog, comment réduire le réseau en une installation standard non multisite WordPress hors réseau?


J'ai trouvé deux liens utiles ci-dessous, c'est possible. J'ai trouvé des informations utiles ici: wpmututorials.com/how-to/how-to-disable-multisite et ici: wordpress.org/support/topic/… Nous verrons comment cela se passe.

Je pense qu'une meilleure façon de le formuler serait d'extraire un seul site d'un réseau. Réduire un réseau en arrière ne fonctionnerait vraiment que le site principal, pas ceux qui y ont été créés.
sanchothefat

Réponses:


17

J'ai parcouru les étapes pour extraire un site d'une installation multisite vers une seule instance maintenant:

  1. Configurer une copie propre de WP mais ne pas l'installer
  2. Trouver l'ID du site
  3. Copiez les fichiers de blogs.dir / ID / files dans le nouveau dossier de téléchargement WP
  4. Copiez le thème utilisé par le site et les plug-ins qu'il utilise dans les dossiers appropriés du nouveau dossier wp-content
  5. Faire une copie de sauvegarde de la base de données multisite mais uniquement des tables du site cible et des tables utilisateurs et utilisateurs à l'aide de MySQL Workbench ou équivalent
  6. Restaurez la sauvegarde dans une nouvelle base de données et modifiez les préfixes de nom de table afin qu'ils soient tous les mêmes, par exemple. 'wp_SITEID_' à 'wp_'
  7. Utiliser MySQL Workbench ou le navigateur de requêtes pour ranger les utilisateurs et les tables usermeta comme ceci:
    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. Commencez le processus d'installation de WP pour créer un wp-config.phpmais ne cliquez pas sur «Exécuter l'installation»
  9. Créez un fichier .htaccess par défaut si les permaliens étaient utilisés ou visitez simplement la page des permaliens dans wp-admin
  10. Vous devrez ensuite mettre à jour toutes les anciennes URL de votre base de données. Idéalement, utilisez un outil de recherche / remplacement sûr comme celui de wp-cli ou son précurseur général de recherche / remplacement de db par interconnexion / it . Remplacez spécifiquement blogs.dir/SITE_ID/filespar uploads, et si vous changez l'URL de votre site, recherchez oldsite.comet remplacez par newsite.com.

Un peu d'effort et vous devez être prudent avec les modifications de la base de données, mais c'est le seul que je peux voir pour extraire un seul site d'un multisite existant avec tous ses paramètres, etc. intact.

ÉDITER:

Comme repéré par @Jake, j'ai oublié de mentionner les dernières étapes que vous devrez peut-être prendre, par exemple. rechercher / remplacer d'anciennes URL. J'ai mis à jour la liste en conséquence.


Rien à l'étape 7 n'a fonctionné ou n'a eu d'effet lorsque j'ai changé SITEIDpour l'ID de site correct. Au lieu de cela, vous devez mentionner que les options siteurlet homedevront probablement être mises à jour dans le wp_optionstableau. Le reste de cette liste était plutôt bonne. Merci.
Jake

Il faudra également probablement effectuer une recherche et un remplacement sur la base de données pour l'ancien domaine / nouveau domaine en cas de changement. Et devra presque DÉFINITIVEMENT rechercher et remplacer pour blogs.dir ou uploads / sites pour vous assurer que tous les liens vers les images / fichiers sont corrects. Soyez prudent cependant avec toutes les données sérialisées dans WP. Il n'est pas très sûr d'exécuter une recherche et un remplacement ouverts dans MYSQL. Utilisez quelque chose comme: interconnectit.com/products/…
Jake

@Jake merci, j'ai oublié le contexte de la modification de l'URL et vous avez raison, j'ai raté l'étape de recherche / remplacement pour les URL existantes, ajoutant que dans un souci d'exhaustivité
sanchothefat

@Jake Je ne suis pas entré dans les détails mais l'étape 7 supprime essentiellement les utilisateurs qui n'appartiennent pas au site que vous extrayez et s'assure qu'ils disposent toujours des autorisations appropriées. C'est vraiment une tâche de nettoyage.
sanchothefat

J'ai compris ce qu'ils ont fait, seul le premier couple a renvoyé des erreurs pour moi, mais peut-être que je manquais quelque chose, et je ne suis pas sûr d'avoir des utilisateurs à nettoyer, donc c'était facile de sauter de toute façon. Et ne vous méprenez pas, c'était extrêmement utile sans ces autres trucs, juste bon à noter pour une utilisation future. Merci!
Jake

5

Il est possible de supprimer l'installation multisite sans réinstaller un nouveau blog. Suivez les étapes.

  1. Créer une sauvegarde, un vidage de base de données et une sauvegarde de fichiers de wp-content
  2. Définissez une constante WP_ALLOW_MULTISITEdans votre wp-config.php surFALSE
  3. Supprimez ou commentez les paramètres MU wp-config.php, comme ceci:

    /**
    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. Supprimez les paramètres MU .htaccess, comme la source ci-dessous:

    # 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. Créez les permaliens nouveaux, dans le backend wp-admin/options-permalink.phpet copiez peut-être le résultat dans .htaccess, si ce n'est pas possible pour WP, les droits d'écriture sur ce fichier.

  6. Supprimez les entrées inutiles du tableau users; utiliser l'instruction sql suivante dans un outil, comme phpMyAdmin ou Adminer

    `ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
  7. Les tableaux suivants peuvent être supprimés:

    • wp_blogs
    • wp_blog_versions
    • wp_registration_log
    • wp_signups
    • wp_site
    • wp_sitemeta
    • wp_sitecategories (uniquement, s'il existe)

    (changez wp_le préfixe de votre base de données)

  8. Vous n'avez maintenant que les derniers tableaux des autres blogs du réseau. Si vous utilisez également ce contenu, exportez-le avant via WordPress, exportez-le en XML et importez-le maintenant dans une installation unique et propre.


1
C'est une bonne réponse, mais j'ai accepté celle de @sanchothefat car la sienne peut être utilisée pour extraire n'importe quel site quel que soit l'identifiant, alors que vos instructions me donneraient le site racine
Tom J Nowell

1

En fait, c'est possible et assez facile à faire; Je l'ai fait moi-même plusieurs fois.

Il y a des choses à considérer.

  1. wp-config.php qui définit si plusieurs sites ou un seul site
  2. .htaccess qui contient les règles de réécriture pour prendre en charge plusieurs sites
  3. les tables supplémentaires créées pour prendre en charge plusieurs sites

La mise en commentaire de la définition multisite (?) Dans wp-config et la mise à jour de vos permaliens ramèneront le site en mode site unique / par défaut. Ensuite, tout ce que vous avez à faire est de nettoyer votre base de données.

Si, pour une raison quelconque, vous n'êtes pas en mesure d'accéder à votre administrateur wp pour mettre à jour les permaliens, supprimez simplement votre fichier .htaccess. WordPress le recréera pour vous en mode site unique.

Je ferai de mon mieux pour trouver le lien vers l'article codes / support et mettre à jour la réponse avec.

Voici un lien vers un élément du forum d'assistance http://wordpress.org/support/topic/revert-to-single-site


0

Les processus de base ici fonctionnent bien même dans WP 3.5.1 Une précision: si vous avez nommé quelque chose pour votre sous-site, vous devrez changer les liens dans la base de données pour supprimer ce nom. Si mon sous-site a été nommé ... mysite.com/comics, après avoir suivi les procédures ci-dessus, votre WP recherchera mysite.com/comics et obtiendra des erreurs sur les permaliens. Modifiez la table WP-OPTIONS en recherchant l'extension / comics et supprimez-la. Vérifiez également que le répertoire Uploads pointe vers l'emplacement approprié - il peut toujours afficher une entrée blogs.dir et devrait désormais pointer vers wp-content / uploads /


Pouvez-vous s'il vous plaît modifier cela pour être une réponse autonome. Il semble que cela pourrait être un commentaire sur l'une des autres réponses.
s_ha_dum

0

Le point très important à ne pas manquer, et dont on parle moins, est que vous devez toujours avoir la ligne:

define( 'WP_ALLOW_MULTISITE',...

Mais il devrait être modifié et mis à jour

define( 'WP_ALLOW_MULTISITE', 0 );

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.