Adicione constantes de rede adicionais ao wp-config.php dinamicamente

10

Ao iniciar com uma nova instalação de rede, a primeira etapa é uma instalação de site único que possui uma linha adicional no wp-config.phparquivo:

define( 'WP_ALLOW_MULTISITE', true );

Depois disso Tools > Network Setup, digite alguns detalhes, como o nome da rede e o email do super administrador e, finalmente, pressione o botão para executar a instalação.

O próximo passo que aparece é na verdade dois passos:

  1. Adicione constantes adicionais ao seu wp-config.phparquivo

    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', true );
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', true );
    define( 'BLOG_ID_CURRENT_SITE', true );
    
  2. Adicione algumas regras ao seu .htaccessarquivo.

Como não faço instalações únicas de sites (não há mais motivo para isso), gostaria de adicionar essas constantes dinamicamente ao meu wp-config.phparquivo:

define( 'WP_ALLOW_MULTISITE', true );
if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )
{
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', true );
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', true );
    define( 'BLOG_ID_CURRENT_SITE', true );
}

Portanto, não preciso ir a wp-config.phpcada vez e editá-lo novamente.

A primeira coisa que me ocorreu foi verificar o banco de dados da {$wpdb->prefix}sitemetatabela, mas não quero fazer uma consulta adicional em cada carregamento do site. A segunda coisa que pensei foi verificar se o blogs.dirjá existe, mas esse não é o caso.

Pergunta: Como posso indicar que já passei na primeira etapa da configuração da rede de uma maneira que não possui uma sobrecarga enorme ou diminui o desempenho.

kaiser
fonte
2
Você não deve tentar automatizar tudo: i.imgur.com/OoF9Md7.png
Ünsal Korkmaz
11
é realmente inacreditável o processo ainda é o mesmo, enquanto mais e mais a instalação WP se tornar multisite
JMau
@ ÜnsalKorkmaz Se você viu minha configuração, você entenderá que este é apenas mais um passo à frente. Próxima coisa: wp-configGerador Grunt .
Kaiser
Não consigo entender por que você precisaria verificar se existe uma condição para cada carregamento de página e depois definir constantes. Você está executando uma configuração multisite ou não. Se você está falando sobre como automatizar o WordPress set-up você pode olhar para algo como YeoPress github.com/wesleytodd/YeoPress
kingkool68
@ kingkool68 Fácil. Porque não quero descomentar / comentar essas constantes cada vez que configuro uma instalação de rede. Não há sobrecarga e a etapa é simplesmente desnecessária. E não, não estou falando de automatizar a configuração do WP. Btw: Yeoman usa Grunt para tarefas (que eu mencionei acima).
Kaiser

Respostas:

1

Não testei isso, mas se você precisar encontrar uma solução desse tipo, provavelmente tentaria fazê-lo da seguinte maneira, adicionando um script à if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )condição descrita acima:

  • verifique o banco de dados para a {$wpdb->prefix}sitemetatabela;
  • se não existir -> retorne false;
  • se existir -> adicione um trabalho cron WP para reescrever wp-config.php-> retorne true.

O trabalho cron do WP reescreveria wp-config.phppara eliminar a verificação completamente.

Dessa forma, você só terá uma solicitação de banco de dados adicional até que a rede esteja configurada e o trabalho cron funcione.

Note que vale a pena o esforço, embora ...;)

Alain Schlesser
fonte
BTW, o script poderia mudar o wp-config.phparquivo diretamente, mas suponho que seria bloqueado naquele momento ...
Alain Schlesser
Essa ideia de trabalho cron é engraçada :) Obrigado por isso. Aliás, você pode editar sua resposta.
kaiser
-1

Inspecionar wp-admin/network.phpe wp-admin/includes/schema.phparquivos. Você pode criar uma condição com base em WP_INSTALLING_NETWORK

Atualizar:

if (is_admin()){
    /* First Step */
    if (!defined( 'WP_ALLOW_MULTISITE')){
            $current_wp_config = file_get_contents(ABSPATH . 'wp-config.php');

            $my_defines = "/* First we put WP_ALLOW_MULTISITE  */\r\n" .
                    "define('WP_ALLOW_MULTISITE', true); \r\n";

            $current_wp_config = str_replace("/* That's all, stop editing", $my_defines . "/* That's all, stop editing", $current_wp_config);       
            file_put_contents(ABSPATH . 'wp-config.php', $current_wp_config);   
    }   
    /* Second Step */
    if (!defined("WP_DEFINES_IMPORTED") && defined("WP_INSTALLING_NETWORK") && $_POST){
        $current_wp_config = file_get_contents(ABSPATH . 'wp-config.php');

        $my_defines = "/* Now we define */\r\n" .
            "define('WP_DEFINES_IMPORTED', true); \r\n" .
            "define('MULTISITE', true); \r\n".
            "define('SUBDOMAIN_INSTALL', true); \r\n".
            "define('DOMAIN_CURRENT_SITE', '". get_clean_basedomain() . "'); \r\n".
            "define('PATH_CURRENT_SITE', '". parse_url(  trailingslashit( get_option( 'home' ) ), PHP_URL_PATH ) . "'); \r\n".
            "define('SITE_ID_CURRENT_SITE', 1); \r\n".
            "define('BLOG_ID_CURRENT_SITE', 1); \r\n";

        $current_wp_config = str_replace("/* That's all, stop editing", $my_defines . "/* That's all, stop editing", $current_wp_config);       
        file_put_contents(ABSPATH . 'wp-config.php', $current_wp_config);   
    }
}
  1. coloque isso na pasta mu-plugins.
  2. instalação wp fresco
  3. vá para o painel de administração
  4. clique para ferramentas
  5. clique para configurar a rede
  6. execute a instalação
  7. ???
  8. lucro!!!

insira a descrição da imagem aqui

Ünsal Korkmaz
fonte
Eu já verifiquei isso. O ponto é que o wp-load.phppuxa wp-config.phpmais cedo, portanto WP_INSTALLING_NETWORKnão será definido. Mas, mesmo que esteja disponível, ele estará disponível apenas durante a configuração da rede. O que eu faria para deixar as constantes após a instalação ser executada?
precisa
Não. Você deve usar uma função para executar uma vez e escrever seu define no arquivo wp-config.php uma vez. Você pode pensar que isso é como register_activation_hook
Ünsal Korkmaz 12/08
index.phppuxa ./wp-blog-header.php), que então puxa wp-load.phpe de lá wp-config.phpé chamado. Uma visão geral pode ser encontrada aqui . admin.phpé chamado antes setup.phpe network.php(e se chama wp-load.phpno início), portanto, o config já está sendo executado.
Kaiser
E como WP_INSTALLING_NETWORKfica define()sem verificar se já é defined(), eu criaria um Fatal Errorlá. Por favor, me mostre errado e faça um teste. :)
kaiser
2
Não, não estou. Estou até ignorando o fato de que eu poderia encarar a tirinha fora de tópico acima como trolling ou apenas rude. Estou procurando uma solução. Período. Mas ter um wp-config.phparquivo gravável é um risco à segurança. Considere que você tem todos os detalhes importantes lá. Eu mostrei a você que não há como isso funcionar (sem ter um arquivo de configuração gravável). O que estou procurando é um indicador (que não diminua a velocidade do sistema) que eu possa verificar e usar como opção. Tudo o resto não vai funcionar.
Kaiser #
-1

Se sua configuração for sempre a mesma (instalação de subdomínio), você poderá colar todo o pedaço na sua primeira etapa:

define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', true ); define( 'DOMAIN_CURRENT_SITE', $_SERVER[ 'HTTP_HOST' ] ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', true ); define( 'BLOG_ID_CURRENT_SITE', true );

Geoff
fonte
Como você pode ver na pergunta, estou bastante ciente das constantes necessárias. O que estou procurando é um indicador confiável se a instalação já passou na etapa 1, nada mais. Consulte a pergunta real destacada na parte inferior. Obrigado por seus esforços difíceis.
Kaiser
Minha resposta foi questionar se você precisa mesmo do indicador, mas confiar na variável do servidor para servir a DOMAIN_CURRENT_SITEconstante correta que o WordPress fornece depois de concluir a configuração interna.
Geoff