Aggiungi costanti di rete aggiuntive a wp-config.php in modo dinamico


10

Quando si inizia con una nuova installazione di rete, il primo passo è un'installazione su un singolo sito con una riga aggiuntiva nel wp-config.phpfile:

define( 'WP_ALLOW_MULTISITE', true );

Dopodiché dobbiamo andare a Tools > Network Setup, inserire alcuni dettagli come il nome della rete e l'e-mail del super amministratore e infine premere il pulsante per eseguire l'installazione.

Il passaggio successivo che si apre è in realtà due passaggi:

  1. Aggiungi costanti aggiuntive al tuo wp-config.phpfile

    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. Aggiungi alcune regole al tuo .htaccessfile.

Dato che non eseguo installazioni su un singolo sito (non c'è più motivo per questo), vorrei aggiungere quelle costanti dinamicamente al mio wp-config.phpfile:

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

Quindi non devo andare su wp-config.phpogni volta e modificarlo di nuovo.

La prima cosa che mi è venuta in mente è stata controllare il DB per la {$wpdb->prefix}sitemetatabella, ma non voglio fare una query aggiuntiva su ogni caricamento del sito. La seconda cosa a cui ho pensato è stata verificare se blogs.diresiste già, ma non è così.

Domanda: Come posso indicare che ho già superato il primo passaggio della configurazione di rete in modo da non avere un sovraccarico enorme o ridurre le prestazioni.


2
Non dovresti provare ad automatizzare tutto: i.imgur.com/OoF9Md7.png
Ünsal Korkmaz

1
è in realtà incredibile che il processo sia sempre lo stesso mentre sempre più installazioni di WP diventano multisito
JMau,

@ ÜnsalKorkmaz Se hai visto la mia configurazione di configurazione, capirai che questo è solo un altro passo avanti. Prossima cosa: wp-configgeneratore di grugniti .
Kaiser,

Non riesco a capire perché dovresti verificare se esiste una condizione per ogni caricamento della pagina e quindi definire le costanti. Stai eseguendo una configurazione multisito o non lo sei. Se stai parlando di automatizzare la configurazione di WordPress puoi esaminare qualcosa come YeoPress github.com/wesleytodd/YeoPress
kingkool68

@ kingkool68 Easy. Perché non voglio decommentare / commentare quelle costanti ogni volta che installo un'installazione di rete. Non è un sovraccarico e il passaggio semplicemente non è necessario. E no, non sto parlando di automatizzare l'installazione di WP. A proposito: Yeoman usa Grunt per le attività (che ho menzionato sopra).
Kaiser,

Risposte:


1

Non l'ho provato, ma se avessi bisogno di trovare una soluzione del genere, probabilmente proverei a farlo nel modo seguente aggiungendo uno script nella if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )condizione che hai descritto sopra, che:

  • controllare il DB per la {$wpdb->prefix}sitemetatabella;
  • se non esiste -> restituisce false;
  • se esiste -> aggiungi un lavoro cron WP da riscrivere wp-config.php-> restituisce vero.

Il processo cron WP riscriverebbe wp-config.phpper eliminare completamente il controllo.

In questo modo, hai solo una richiesta DB aggiuntiva fino a quando la rete non viene impostata e il cron job ha fatto la sua magia.

Nota che questo vale la pena, però ...;)


A proposito, lo script potrebbe cambiare wp-config.phpdirettamente il file, ma suppongo che a quel punto sarebbe bloccato ...
Alain Schlesser

L'idea di cron job è divertente :) Grazie per quello. A proposito, puoi modificare la tua risposta.
Kaiser

-1

Ispeziona wp-admin/network.phpe wp-admin/includes/schema.phparchivia. È possibile creare una condizione basata su WP_INSTALLING_NETWORK

Aggiornare:

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. mettilo nella cartella mu-plugins.
  2. nuova installazione di wp
  3. vai al pannello di amministrazione
  4. fai clic sugli strumenti
  5. fai clic per configurare la rete
  6. eseguire l'installazione
  7. ???
  8. profitto!!!

inserisci qui la descrizione dell'immagine


L'ho già verificato. Punto è che wp-load.phptira in wp-config.phpprecedenza, in modo da WP_INSTALLING_NETWORKnon saranno definiti. Ma anche se sarebbe disponibile, è disponibile solo durante l'installazione della rete. Cosa farei per lasciare le costanti dopo che l'installazione è stata eseguita?
Kaiser,

No .. dovresti usare una funzione per eseguire una volta e scrivere una volta le tue definizioni nel file wp-config.php. Puoi pensarlo come register_activation_hook
Ünsal Korkmaz

index.phptira ./wp-blog-header.php), che quindi tira wp-load.phpe da lì wp-config.phpviene chiamato. Una panoramica è disponibile qui . admin.phpstesso viene chiamato prima setup.phpe network.php(e si chiama wp-load.phpall'inizio), quindi la configurazione è già in esecuzione.
Kaiser,

E come WP_INSTALLING_NETWORKottiene define()senza verificare se è già defined(), vorrei creare un Fatal Errorlà. Per favore, prova a sbagliarmi e fai un test. :)
Kaiser

2
No Ünsal, non lo sono. Sto anche ignorando il fatto che potrei prendere il fumetto fuori tema sopra come trolling o semplicemente maleducato. Sto cercando una soluzione. Periodo. Ma avere un wp-config.phpfile scrivibile è un rischio per la sicurezza. Considera che hai tutti i dettagli importanti lì dentro. Ti ho mostrato che non c'è modo che funzioni (senza avere un file di configurazione scrivibile). Quello che sto cercando è un indicatore (che non rallenta il sistema) che posso verificare e utilizzare come interruttore. Tutto il resto non funzionerà.
Kaiser

-1

Se la tua configurazione è sempre la stessa (installazione del sottodominio), potresti essere in grado di incollare l'intero blocco nel primo passaggio:

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


Come puoi vedere nella domanda, sono abbastanza consapevole delle costanti necessarie. Quello che sto cercando è un indicatore affidabile se l'installazione ha già superato il passaggio 1, nient'altro. Si prega di vedere la domanda effettiva evidenziata in fondo. Grazie per i tuoi sforzi duri.
Kaiser

La mia risposta è stata quella di contestare se hai persino bisogno dell'indicatore, ma piuttosto fare affidamento sulla variabile del server per servire la DOMAIN_CURRENT_SITEcostante corretta che WordPress ti dà dopo aver completato l'installazione interna.
Geoff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.