web-dev-qa-db-fra.com

Est-il possible d'utiliser simplement wp-cli pour migrer une instance multisite vers un seul site?

Aujourd'hui, j'ai mis beaucoup de temps à convertir un site de https://example.com en https://sub.example2.com de l'installation de plusieurs versions de WordPress en installation normale de WordPress (lisez: singlesite).

Depuis que j'ai commencé à utiliser wp-cli récemment, je pensais qu'il serait possible de le faire uniquement avec wp-cli.

J'ai utilisé wp-cli pour exporter une base de données. Depuis que mon instance a été préfixée comme suit: wp_9_

J'ai utilisé le code comme ceci:

wp db export --tables="wp_users, wp_usermeta, wp_9_posts, wp_9_comments, wp_9_links, wp_9_options, wp_9_postmeta, wp_9_terms, wp_9_term_taxonomy, wp_9_term_relationships, wp_9_termmeta, wp_9_commentmeta" 

Bien que j'ai découvert plus tard que je devrais utiliser quelque chose comme ceci:

wp db export --tables=wp_users,wp_usermeta, $(wp db tables --all-tables-with-prefix 'wp_9' --format=csv --allow-root) --allow-root

Pour ceux qui n'utilisent pas le #

wp db export --tables=wp_users,wp_usermeta, $(wp db tables --all-tables-with-prefix 'wp_9' --format=csv) 

Puis je pose:

define('WP_HOME','https://sub.example2.com');
define('WP_SITEURL','https://sub.example2.com'); 

Mais j’ai fait face au problème: messages, guides et méta non mis à jour ... Habituellement, je ne fais jamais l’étape suivante car cela fonctionne dans de nombreux cas.

Mais j'ai été obligé de faire ce qui suit:

UPDATE wp_posts SET post_content = replace(post_content, 'https://example.com', 'https://sub.example2.com');
UPDATE wp_posts SET guid = replace(guid, 'https://example.com', 'https://sub.example2.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'https://example.com', 'https://sub.example2.com');

Encore plus loin, je devais mettre à jour le chemin des uploads, dans le contenu du post et même dans le post_meta, car sur mulitsite, le chemin des uploads était /uploads/sites/9/ alors que sur un seul site /uploads/.

Cela devrait aussi se refléter dans les posts et post meta comme ceci:

UPDATE wp_posts SET post_content = replace(post_content, '/uploads/sites/9/', '/uploads/');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'/uploads/sites/9/', '/uploads/');

Après cette étape, j'ai copié manuellement les fichiers du dossier/uploads/sites/9/dans le dossier/uploads/de la nouvelle instance WordPress sur le même serveur à l'aide de la commande cp. Malheureusement, je n'ai même pas envisagé wp-cli pour cela.

Je demande s'il est possible d'automatiser entièrement ces processus en utilisant wp-cli? Ce serait une grande aide la prochaine fois.

3
prosti

Essayez d’utiliser la commande 10up/MU-Migration: https://github.com/10up/MU-Migration

2

Si votre installation multi-site ne comporte qu'un petit nombre de sous-sites, il vous sera peut-être plus simple d'utiliser les outils d'exportation et d'importation de la zone d'administration.

Pour chaque site de l’installation multisite, vous pouvez télécharger un fichier d’exportation contenant des articles de blog, des pages, des utilisateurs, des commentaires, etc. Vous pouvez ensuite importer tous ces éléments dans le même site. Peut-être plus facile que de jouer avec la base de données ...

1
AntonChanning

Au lieu de faire ces commandes MySQL UPDATE, vous pouvez utiliser la commande wp search-replace de WP-CLI.

Exemple: wp search-replace 'https://example.com' 'https://sub.example2.com'

Il s'agit d'une recherche et d'un remplacement sécurisés pour la sérialisation, afin que votre méta ne soit pas déréglée.

Plus d'infos sur http://wp-cli.org/commands/search-replace/

0
Anthony