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?

Tom J Nowell
fonte
Encontrei dois links úteis abaixo, isso é possível. Encontrei informações úteis aqui: wpmututorials.com/how-to/how-to-disable-multisite e aqui: wordpress.org/support/topic/… Vamos ver como vai.
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:

  1. Configure uma cópia limpa do WP, mas não a instale
  2. Encontre o ID do site
  3. Copie os arquivos de blogs.dir / ID / files para a nova pasta de uploads do WP
  4. Copie o tema que o site usa e todos os plugins que ele usa para as pastas apropriadas na nova pasta wp-content
  5. 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
  6. 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_'
  7. Usando o MySQL workbench ou o navegador de consultas, arrume os usuários e as tabelas de usuários, assim:
    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. Inicie o processo de instalação do WP para criar um wp-config.php mas não clique em 'Executar a instalação'
  9. Crie um arquivo .htaccess padrão se os links permanentes estiverem em uso ou visite a página de links permanentes em wp-admin
  10. 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.

sanchothefat
fonte
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.

  1. Crie um backup, despejo de banco de dados e backup de arquivo do wp-content
  2. Defina constante WP_ALLOW_MULTISITEno seu wp-config.php paraFALSE
  3. Remova ou comente as configurações da MU wp-config.php, desta forma:

    /**
    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. Remova as configurações de MU de .htaccess, como na fonte abaixo:

    # 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. 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.

  6. 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`;`
  7. 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)

  8. 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.

bueltge
fonte
11
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.

  1. wp-config.php, que define se vários sites ou site único
  2. .htaccess que contém as regras de reescrita para oferecer suporte a vários sites
  3. 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.

Aqui está um link para um item no fórum de suporte http://wordpress.org/support/topic/revert-to-single-site

Steve
fonte
0

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 /

user28829
fonte
Você pode editar isso para ser uma resposta independente. Parece que deve ser um comentário sobre uma das outras respostas.
s_ha_dum
0

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 );

smhnaji
fonte