web-dev-qa-db-fra.com

Convertir une installation WordPress multisite en un seul site

Avec un réseau WordPress multisite, avec un blog principal et en supposant que tout le contenu a été transféré sur ce blog, comment pourrait-on réduire le réseau en une installation standard non multisite WordPress?

16
Tom J Nowell

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

  1. Configurez une copie vierge de WP mais ne l'installez pas
  2. Trouver l'ID du site
  3. Copiez les fichiers de blogs.dir/ID/files dans le nouveau dossier WP uploads.
  4. Copiez le thème utilisé par le site et tous les plug-ins qu'il utilise dans les dossiers appropriés du nouveau dossier wp-content.
  5. Effectuez une sauvegarde de la base de données multisite mais uniquement des tables du site cible et des tables des utilisateurs et usermeta avec MySQL Workbench ou son é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 identiques, par exemple. 'wp_SITEID_' à 'wp_'
  7. En utilisant MySQL Workbench ou le navigateur de requêtes, rangez les utilisateurs et les tables usermeta comme suit:
    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 WP pour créer un wp-config.php, mais ne cliquez pas sur 'Exécuter l'installation'
  9. Créez un fichier .htaccess par défaut si des permaliens étaient utilisés ou visitez simplement la page des permaliens dans wp-admin
  10. Vous devrez ensuite mettre à jour les anciennes URL de votre base de données. Idéalement, utilisez un outil de recherche/remplacement sûr tel que celui de wp-cli ou son précurseur à usage général search/replace db par interconnecter/it . Remplacez spécifiquement blogs.dir/SITE_ID/files par uploads et, si vous modifiez l'URL de votre site, recherchez oldsite.com et remplacez-le 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 site unique d'un multisite existant avec tous ses paramètres, etc ... intact.

EDIT:

Comme @Jake l’a remarqué, j’ai oublié de mentionner les étapes finales que vous devrez peut-être prendre, par exemple. rechercher/remplacer d'anciennes URL. J'ai mis à jour la liste en conséquence.

15
sanchothefat

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

  1. Créer une sauvegarde, une sauvegarde de la base de données et une sauvegarde de fichier de wp-content
  2. Définissez la constante WP_ALLOW_MULTISITE dans votre wp-config.php sur FALSE
  3. Supprimez ou commentez les paramètres MU dans 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 de MU de .htaccess, comme pour 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 new dans le backend wp-admin/options-permalink.php et copiez éventuellement le résultat dans .htaccess, si ce n’est pas possible pour WP, les droits d’écriture sur ce fichier.

  6. Supprimer les entrées inutiles de la table users; utilisez 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 (seulement s'il existe)

    (remplacez wp_ par le préfixe de votre base de données)

  8. Maintenant, vous n'avez que les dernières tables des autres blogs du réseau. Si vous voulez également utiliser ce contenu, exportez-le avant via WordPress et exportez-le maintenant, puis importez-le maintenant.

5
bueltge

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 supporter plusieurs sites
  3. les tables supplémentaires créées pour prendre en charge plusieurs sites

En commentant la définition multisite (?) Dans wp-config et en mettant à jour vos permaliens, le site sera rétabli 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 ne pouvez pas accéder à votre wp-admin 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 les codes/article de support et mettre à jour la réponse avec.

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

1
Steve

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

define( 'WP_ALLOW_MULTISITE',...

Mais il devrait être mis à jour pour

define( 'WP_ALLOW_MULTISITE', 0 );

0
smhnaji

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

0
user28829