Converter uma instalação multissite do WordPress em um único site
17
Dada uma rede multissite do WordPress, com um blog principal, e assumindo que todo o conteúdo foi movido para esse blog, como reduzir a rede a uma instalação padrão não multisite sem rede do WordPress?
Eu acho que uma maneira melhor de expressar isso seria extrair um único site de uma rede. O colapso de uma rede de volta funcionaria realmente apenas no site principal, e não nos criados.
Sanchothefat
Respostas:
17
Eu segui as etapas para extrair um site de uma instalação multisite para uma única instância agora:
Configure uma cópia limpa do WP, mas não a instale
Encontre o ID do site
Copie os arquivos de blogs.dir / ID / files para a nova pasta de uploads do WP
Copie o tema que o site usa e todos os plugins que ele usa para as pastas apropriadas na nova pasta wp-content
Faça um backup do banco de dados multisite, mas apenas as tabelas para o site de destino e as tabelas de usuários e meta-usuários usando o MySQL workbench ou equivalente
Restaure o backup em um novo banco de dados e altere os prefixos de nome da tabela para que sejam todos iguais, por exemplo. 'wp_SITEID_' para 'wp_'
Usando o MySQL workbench ou o navegador de consultas, arrume os usuários e as tabelas de usuários, assim:
DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
Inicie o processo de instalação do WP para criar um wp-config.php mas não clique em 'Executar a instalação'
Crie um arquivo .htaccess padrão se os links permanentes estiverem em uso ou visite a página de links permanentes em wp-admin
Você precisará atualizar os URLs antigos no seu banco de dados a seguir. Idealmente, use uma ferramenta de pesquisa / substituição segura, como a do wp-cli ou seu precursor de uso geral, procure / substitua o db pela interconexão . Substitua especificamente blogs.dir/SITE_ID/filespor uploadse, se você estiver alterando, procure oldsite.come substitua por URL do site newsite.com.
Um pouco de esforço e você precisa ter cuidado com as edições do banco de dados, mas é o único que consigo extrair para um único site de um multisite existente com todas as suas configurações etc ... intactas.
EDITAR:
Conforme observado por @Jake, eu esqueci de mencionar as etapas finais que você pode precisar seguir, por exemplo. pesquisa / substituição de URLs antigos. Atualizei a lista de acordo.
Nada na etapa 7 funcionou ou teve algum efeito quando mudei SITEIDpara o ID do site correto. Em vez disso, você deve mencionar que as opções siteurle homeprovavelmente precisarão ser atualizadas na wp_optionstabela. O resto disso foi uma boa lista de verificação. Obrigado.
Jake #
Provavelmente, também será necessário localizar e substituir o banco de dados no domínio antigo / novo domínio, se for alterado. E DEFINITIVAMENTE precisará encontrar e substituir blogs.dir ou uploads / sites para garantir que todos os links para imagens / arquivos estejam corretos. Tenha cuidado, porém, com todos os dados serializados no WP. Não é muito seguro executar uma localização aberta e substituir no MYSQL. Use algo como: interconnectit.com/products/…
Jake
@Jake obrigado, eu esqueci o contexto de mudar a URL e você está certo eu perdi a pesquisa / substitua a etapa para URLs existentes, acrescentando que, por uma questão de exaustividade
sanchothefat
@ Jake Eu não entrei em detalhes, mas a etapa 7 basicamente remove os usuários que não pertencem ao site que você está extraindo e garante que eles ainda tenham as permissões corretas. É realmente uma tarefa de limpeza.
Sanchothefat 02/12/2013
Eu entendi o que eles fizeram, apenas o primeiro par retornou erros para mim, mas talvez eu estivesse perdendo alguma coisa e não tenho certeza se tinha algum usuário para limpar, por isso foi fácil pular de qualquer maneira. E não me interpretem mal, isso foi extremamente útil sem essas outras coisas, é bom observar para uso futuro. Obrigado!
Jake
5
É possível remover a instalação multisite sem reinstalar um novo blog. Siga os passos.
Crie um backup, despejo de banco de dados e backup de arquivo do wp-content
Defina constante WP_ALLOW_MULTISITEno seu wp-config.php paraFALSE
Remova ou comente as configurações da MU wp-config.php, desta forma:
Remova as configurações de MU de .htaccess, como na fonte abaixo:
# BEGIN WordPressRewriteEngineOnRewriteBase/wordpress/RewriteRule^index\.php$ -[L]# uploaded filesRewriteRule^([_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
Crie os permalinks novos, no back-end, wp-admin/options-permalink.phpe talvez copie o resultado .htaccess, se não for possível para o WP, direitos de gravação neste arquivo.
Remova entradas não úteis na tabela users; use a instrução sql a seguir em uma ferramenta, como phpMyAdmin ou Adminer
`ALTER TABLE `wp_users` DROP `spam`, DROP `deleted`;`
As tabelas a seguir podem ser descartadas:
wp_blogs
wp_blog_versions
wp_registration_log
wp_signups
wp_site
wp_sitemeta
wp_sitecategories (apenas, se existir)
(mude wp_para o prefixo do banco de dados)
Agora você tem apenas as últimas tabelas de outros blogs da rede. Se você usar esse conteúdo também, exporte-o antes via WordPress exportar como XML e importe agora na instalação única limpa.
Esta é uma boa resposta, mas, eu aceitei a um por @sanchothefat como o seu pode ser usado para extrair qualquer site, independentemente da ID, enquanto suas instruções me daria o site raiz
Tom J Nowell
1
Na verdade, é possível e bastante fácil de fazer; Eu já fiz isso várias vezes.
Há coisas a considerar.
wp-config.php, que define se vários sites ou site único
.htaccess que contém as regras de reescrita para oferecer suporte a vários sites
as tabelas adicionais criadas para oferecer suporte a vários sites
Comentar o multi site define (?) Em wp-config e atualizar seus permalinks reverterá o site para o site único / modo padrão. Então tudo que você precisa fazer é limpar seu banco de dados.
Se, por algum motivo, você não conseguir acessar o wp-admin para atualizar os permalinks, basta excluir o arquivo .htaccess. O WordPress irá recriá-lo para você no modo de site único.
Farei o possível para encontrar o link para o artigo sobre códigos / suporte e atualizar a resposta com ele.
Os processos básicos aqui funcionam bem, mesmo no WP 3.5.1. Um esclarecimento: se você nomeou seu subsite como algo, precisará alterar os links no banco de dados para remover esse nome. Se meu subsite foi nomeado ... mysite.com/comics, depois de seguir os procedimentos acima, o seu WP procurará mysite.com/comics e obterá erros nos permalinks. Edite a tabela WP-OPTIONS procurando a extensão / comics e remova-a. Além disso, verifique se o diretório Uploads está apontando para o local apropriado - ele ainda pode mostrar uma entrada blogs.dir e agora deve apontar para wp-content / uploads /
Respostas:
Eu segui as etapas para extrair um site de uma instalação multisite para uma única instância agora:
DELETE FROM wp_usermeta WHERE user_id NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
DELETE FROM wp_users WHERE ID NOT IN( SELECT distinct(user_id) FROM wp_usermeta where meta_key LIKE 'wp_SITEID_%' );
UPDATE wp_usermeta SET meta_key = REPLACE( meta_key, 'wp_SITEID_', 'wp_' ) WHERE meta_key LIKE 'wp_SITEID_%';
UPDATE wp_options SET option_name = REPLACE( option_name, 'wp_SITEID_', 'wp_' ) WHERE option_name LIKE 'wp_SITEID_%';
wp-config.php
mas não clique em 'Executar a instalação'blogs.dir/SITE_ID/files
poruploads
e, se você estiver alterando, procureoldsite.com
e substitua por URL do sitenewsite.com
.Um pouco de esforço e você precisa ter cuidado com as edições do banco de dados, mas é o único que consigo extrair para um único site de um multisite existente com todas as suas configurações etc ... intactas.
EDITAR:
Conforme observado por @Jake, eu esqueci de mencionar as etapas finais que você pode precisar seguir, por exemplo. pesquisa / substituição de URLs antigos. Atualizei a lista de acordo.
fonte
SITEID
para o ID do site correto. Em vez disso, você deve mencionar que as opçõessiteurl
ehome
provavelmente precisarão ser atualizadas nawp_options
tabela. O resto disso foi uma boa lista de verificação. Obrigado.É possível remover a instalação multisite sem reinstalar um novo blog. Siga os passos.
WP_ALLOW_MULTISITE
no seu wp-config.php paraFALSE
Remova ou comente as configurações da MU
wp-config.php
, desta forma:Remova as configurações de MU de
.htaccess
, como na fonte abaixo:Crie os permalinks novos, no back-end,
wp-admin/options-permalink.php
e talvez copie o resultado.htaccess
, se não for possível para o WP, direitos de gravação neste arquivo.Remova entradas não úteis na tabela
users
; use a instrução sql a seguir em uma ferramenta, como phpMyAdmin ou AdminerAs tabelas a seguir podem ser descartadas:
(mude
wp_
para o prefixo do banco de dados)Agora você tem apenas as últimas tabelas de outros blogs da rede. Se você usar esse conteúdo também, exporte-o antes via WordPress exportar como XML e importe agora na instalação única limpa.
fonte
Na verdade, é possível e bastante fácil de fazer; Eu já fiz isso várias vezes.
Há coisas a considerar.
Comentar o multi site define (?) Em wp-config e atualizar seus permalinks reverterá o site para o site único / modo padrão. Então tudo que você precisa fazer é limpar seu banco de dados.
Se, por algum motivo, você não conseguir acessar o wp-admin para atualizar os permalinks, basta excluir o arquivo .htaccess. O WordPress irá recriá-lo para você no modo de site único.
Farei o possível para encontrar o link para o artigo sobre códigos / suporte e atualizar a resposta com ele.
Aqui está um link para um item no fórum de suporte http://wordpress.org/support/topic/revert-to-single-site
fonte
Os processos básicos aqui funcionam bem, mesmo no WP 3.5.1. Um esclarecimento: se você nomeou seu subsite como algo, precisará alterar os links no banco de dados para remover esse nome. Se meu subsite foi nomeado ... mysite.com/comics, depois de seguir os procedimentos acima, o seu WP procurará mysite.com/comics e obterá erros nos permalinks. Edite a tabela WP-OPTIONS procurando a extensão / comics e remova-a. Além disso, verifique se o diretório Uploads está apontando para o local apropriado - ele ainda pode mostrar uma entrada blogs.dir e agora deve apontar para wp-content / uploads /
fonte
O ponto muito importante que não deve ser esquecido, e é menos comentado, é que você ainda deve ter a linha:
define( 'WP_ALLOW_MULTISITE',
...Mas deve ser alterado atualizado para
define( 'WP_ALLOW_MULTISITE', 0 );
fonte