Fügen Sie wp-config.php dynamisch zusätzliche Netzwerkkonstanten hinzu


10

Wenn Sie mit einer Neuinstallation des Netzwerks beginnen, ist der erste Schritt eine Installation an einem einzelnen Standort mit einer zusätzlichen Zeile in der wp-config.phpDatei:

define( 'WP_ALLOW_MULTISITE', true );

Danach müssen wir Tools > Network Setupeinige Details wie den Netzwerknamen und die Superadministrator-E-Mail eingeben und schließlich auf die Schaltfläche klicken, um das Setup auszuführen.

Der nächste Schritt, der angezeigt wird, sind zwei Schritte:

  1. Fügen Sie Ihrer Datei zusätzliche Konstanten hinzuwp-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. Fügen Sie Ihrer .htaccessDatei einige Regeln hinzu .

Da ich keine Single-Site-Installationen mehr durchführe (kein Grund mehr dafür), möchte ich diese Konstanten dynamisch zu meiner wp-config.phpDatei hinzufügen :

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

Ich muss also nicht wp-config.phpjedes Mal zum gehen und es erneut bearbeiten.

Das erste, was mir in den Sinn kam, war, die {$wpdb->prefix}sitemetaDatenbank auf die Tabelle zu überprüfen , aber ich möchte nicht bei jedem Laden der Site eine zusätzliche Abfrage durchführen. Das zweite, woran ich dachte, war zu überprüfen, ob das blogs.dirbereits existiert, aber das ist nicht der Fall.

Frage: Wie kann ich angeben, dass ich den ersten Schritt des Netzwerk-Setups bereits so bestanden habe, dass kein massiver Overhead entsteht oder die Leistung abnimmt?


2
Sie sollten nicht versuchen, alles zu automatisieren: i.imgur.com/OoF9Md7.png
Ünsal Korkmaz

1
Es ist tatsächlich unglaublich, dass der Prozess immer noch der gleiche ist, während immer mehr WP-Installationen
multisite

@ ÜnsalKorkmaz Wenn Sie mein Konfigurationssetup gesehen haben, werden Sie verstehen, dass dies nur ein weiterer Schritt vorwärts ist. Nächstes: Grunzgenerator wp-config.
Kaiser

Ich kann nicht verstehen, warum Sie überprüfen müssen, ob für jedes Laden einer Seite eine Bedingung vorliegt, und dann Konstanten definieren müssen. Sie führen ein Multisite-Setup durch oder nicht. Wenn Sie über die Automatisierung der WordPress-Einrichtung sprechen, können Sie sich etwas wie YeoPress github.com/wesleytodd/YeoPress
kingkool68

@ kingkool68 Einfach. Weil ich diese Konstanten nicht jedes Mal auskommentieren / kommentieren möchte, wenn ich eine Netzwerkinstallation einrichte. Es ist kein Overhead und der Schritt ist einfach unnötig. Und nein, ich spreche nicht über die Automatisierung des WP-Setups. Übrigens: Yeoman benutzt Grunt für Aufgaben (die ich oben erwähnt habe).
Kaiser

Antworten:


1

Ich habe dies nicht getestet, aber wenn Sie eine solche Lösung finden müssten, würde ich wahrscheinlich versuchen, dies auf folgende Weise zu tun, indem ich ein Skript in die if ( SOME_CHECK_IF_STEP-1_WAS_PASSED )oben beschriebene Bedingung einfüge.

  • Überprüfen Sie die Datenbank für die {$wpdb->prefix}sitemetaTabelle.
  • wenn es nicht existiert -> false zurückgeben;
  • falls vorhanden -> fügen Sie einen WP-Cron-Job zum Umschreiben hinzu wp-config.php-> geben Sie true zurück.

Der WP-Cron-Job würde das umschreiben wp-config.php, um die Prüfung vollständig zu eliminieren.

Auf diese Weise haben Sie nur eine zusätzliche DB-Anforderung, bis das Netzwerk eingerichtet ist und der Cron-Job seine Magie ausgeführt hat.

Beachten Sie jedoch, dass sich die Mühe lohnt ...;)


Übrigens könnte das Skript die wp-config.phpDatei direkt ändern , aber ich nehme an, dass sie an diesem Punkt gesperrt sein würde ...
Alain Schlesser

Diese Cron Job Idee ist lustig :) Danke dafür. Übrigens können Sie Ihre Antwort bearbeiten .
Kaiser

-1

Inspizieren wp-admin/network.phpund archivieren wp-admin/includes/schema.php. Sie können eine Bedingung basierend auf WP_INSTALLING_NETWORK erstellen

Aktualisieren:

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. lege dies in den Ordner mu-plugins.
  2. frisch wp installieren
  3. Gehen Sie zum Admin-Bereich
  4. Klicken Sie auf Werkzeuge
  5. Klicken Sie hier, um das Netzwerk einzurichten
  6. Führen Sie das Setup aus
  7. ???
  8. profitieren!!!

Geben Sie hier die Bildbeschreibung ein


Das habe ich schon überprüft. Punkt ist , dass wp-load.phpzieht in wp-config.phpfrüher, so WP_INSTALLING_NETWORKwird nicht definiert werden. Aber selbst wenn es verfügbar wäre, ist es nur während der Netzwerkeinrichtung verfügbar. Was würde ich tun, um die Konstanten nach der Installation beizubehalten?
Kaiser

Nein. Sie sollten eine Funktion verwenden, um sie einmal auszuführen und Ihre Definitionen einmal in die Datei wp-config.php zu schreiben. Sie können es wie register_activation_hook denken
Ünsal Korkmaz

index.phpzieht ./wp-blog-header.php), die dann zieht wp-load.phpund von dort wp-config.phpheißt. Eine Übersicht finden Sie hier . admin.phpselbst wird vor setup.phpund aufgerufen network.php(und ruft wp-load.phpsich am Anfang auf), daher wurde config bereits ausgeführt.
Kaiser

Und wie es WP_INSTALLING_NETWORKgeht define()ohne zu prüfen ob es schon ist defined(), würde ich dort ein erstellen Fatal Error. Bitte beweisen Sie mir das Gegenteil und testen Sie es. :)
Kaiser

2
Nein Ünsal, bin ich nicht. Ich ignoriere sogar die Tatsache, dass ich den Off-Topic-Comic oben als Trolling oder einfach nur unhöflich ansehen könnte. Ich suche nach einer Lösung. Zeitraum. Eine beschreibbare wp-config.phpDatei ist jedoch ein Sicherheitsrisiko. Bedenken Sie, dass Sie dort alle wichtigen Details haben. Ich habe Ihnen gezeigt, dass dies auf keinen Fall funktionieren würde (ohne eine beschreibbare Konfigurationsdatei). Was ich suche, ist ein Indikator (der das System nicht verlangsamt), den ich überprüfen und als Schalter verwenden kann. Alles andere wird nicht funktionieren.
Kaiser

-1

Wenn Ihr Setup jedes Mal dasselbe ist (Installation der Subdomain), können Sie möglicherweise den gesamten Block in Ihrem ersten Schritt einfügen:

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


Wie Sie in der Frage sehen können, bin ich mir der benötigten Konstanten durchaus bewusst. Was ich suche, ist ein zuverlässiger Indikator, wenn das Setup Schritt 1 bereits bestanden hat, sonst nichts. Bitte beachten Sie die hervorgehobene aktuelle Frage unten. Vielen Dank für Ihre Bemühungen.
Kaiser

Meine Antwort war zu hinterfragen, ob Sie überhaupt den Indikator benötigen, sondern sich auf die Servervariable zu verlassen, um die korrekte DOMAIN_CURRENT_SITEKonstante zu liefern, die WordPress Ihnen nach Abschluss des internen Setups gibt.
Geoff
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.