Adiciona 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 tenha uma linha adicional no arquivo wp-config.php :

define( 'WP_ALLOW_MULTISITE', true );

Depois disso, temos que ir para Tools > Network Setup , inserir alguns detalhes como nome da rede e super admin e finalmente clicar no botão para executar a configuração.

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

  1. Adicione as constantes adicionais ao seu arquivo wp-config.php

    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 arquivo .htaccess .

Como não faço instalações individuais de sites (não há mais motivos para isso), gostaria de adicionar essas constantes dinamicamente ao meu arquivo wp-config.php :

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 para wp-config.php e editá-lo novamente.

A primeira coisa que me ocorreu foi verificar o banco de dados para a tabela {$wpdb->prefix}sitemeta , mas não quero fazer uma consulta adicional em cada carregamento de site. A coisa 2nd que eu pensei foi verificar se o blogs.dir já existe, mas esse não é o caso.

  

Pergunta: Como posso indicar que já passei da primeira etapa da configuração da rede de forma que ela não tenha uma sobrecarga enorme ou diminua o desempenho.

    
por kaiser 12.08.2013 / 14:18

3 respostas

1

Eu não testei isso, mas se você precisasse encontrar essa solução, eu provavelmente tentaria fazer isso da seguinte maneira, adicionando um script na condição if ( SOME_CHECK_IF_STEP-1_WAS_PASSED ) que você descreveu acima, que seria :

  • verifique o banco de dados para a tabela {$wpdb->prefix}sitemeta ;
  • se não existir - > retorno falso;
  • se existir - > adicione um trabalho do WP cron para reescrever wp-config.php - > retorno verdadeiro.

O cron job do WP iria reescrever o wp-config.php para eliminar completamente a verificação.

Dessa forma, você só tem uma solicitação DB adicional até que a rede esteja configurada e a tarefa cron faça sua mágica.

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

    
por Alain Schlesser 10.03.2016 / 13:15
-1

Inspecione os arquivos wp-admin/network.php e wp-admin/includes/schema.php . Você pode criar uma condição com base em WP_INSTALLING_NETWORK

Atualização:

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 fresca do wp
  3. vá para o painel de administração
  4. clique em ferramentas
  5. clique na configuração de rede
  6. execute a configuração
  7. ???
  8. lucro !!!

    
por Ünsal Korkmaz 12.08.2013 / 15:38
-1

Se a sua configuração é sempre a mesma (instalação de subdomínio), você poderá colar o bloco inteiro em 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 );

    
por Geoff 26.01.2016 / 21:41