it-swarm.dev

Was ist der beste Weg, um die zu laden WP Umgebung in einer Unterdomäne meiner Multisite-Wordpress-Installation?

Ich habe einen Unterordner mit der Installation von WP multisite, sagen wir mal "domain.com".

Ich muss jetzt die WP -Umgebung in Subdomains von domain.com laden, z. B. "1.domain.com", "2.domain.com", ... "SubN.domain.com". Beachten Sie, dass diese Subdomains nicht mit WP Blogs übereinstimmen. Ich muss jedoch Zugriff auf den angemeldeten Benutzer, die Datenbank usw. haben.

Ich habe Wildcard-Subdomains eingerichtet, um eine PHP-Datei zu laden, die anzeigt, was ich für eine bestimmte Subdomain benötige, und ich füge "wp-load.php" zu Beginn dieser Datei hinzu. Das Problem ist, dass in der Nähe von Zeile 99 in "ms-settings.php" auf die Hauptseite der Site umgeleitet wird, da $ _SERVER ['HTTP_Host'] die Unterdomäne und nicht die Domäne der Hauptsite ist.

Wie kann ich die Umgebung WP korrekt in eine Nicht-Blog-Unterdomäne laden?

Ich habe einen Prototyp, der funktioniert, aber ich mache mir Sorgen über die Nebenwirkungen von dem, was ich tue. Es wäre großartig, wenn sich jemand wiegen könnte, der mit dem Kern vertraut ist.

Was ich tue, ist, die $ current_site- und $ current_blog-Globals vorab zu füllen, bevor ich "wp-load" einbinde. "Ms-settings" versucht dann nicht, diese zu erstellen und greift nicht auf den Codepfad zu, der die Unterdomäne erkennt und zur Startseite umleitet.

Ich kann jetzt auf Mitgliedsinformationen zugreifen (z. B. mit 'get_userdata') und auf $ wpdb.

Scheint dies ein vernünftiger Ansatz zu sein?

5
Greg

Verwenden Sie die Definitionen, um die Site auszuwählen, die Sie auswählen möchten.

Sie können diese vier definieren, um die $ current_site-Werte korrekt einzurichten: DOMAIN_CURRENT_SITE, PATH_CURRENT_SITE, SITE_ID_CURRENT_SITE, BLOG_ID_CURRENT_SITE.

Wenn Sie die Funktion wpmu_current_site () in ms-load.php überprüfen, werden Sie feststellen, dass diese verwendet werden, um die globale $ current_site zu erstellen.

Möglicherweise müssen Sie $ current_blog global manuell ausfüllen oder nicht. Nicht sicher. Probieren Sie es aus und sehen Sie.

Realistisch gesehen müssen Sie nur so etwas hinzufügen, bevor Sie wp-load.php aufrufen:

define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

Natürlich mit den richtigen Werten für Ihre Haupt-example.com-Site.

Wenn Sie diese nicht in die PHP-Dateien der Subdomain selbst einfügen möchten, können Sie dies entweder in der Datei wp-config.php oder in der Datei sunrise.php tun (wenn Sie SUNRISE in der WP-Datei auf true setzen). config.php natürlich auch).

if ( $_SERVER['HTTP_Host'] == 'sub1.example.com' || 
     $_SERVER['HTTP_Host'] == 'sub2.example.com') {
    define( 'DOMAIN_CURRENT_SITE', 'example.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', 1 );
    define( 'BLOG_ID_CURRENT_SITE', 1 );
}

Genau dafür ist das Laden von sunrise-Dateien da, um einen Ort zu ermöglichen, an dem Sie solche Dinge manuell überschreiben können. Der Vorteil der Verwendung von sunrise.php gegenüber wp-config.php (was auch funktioniert) besteht darin, dass Sie sunrise leicht an einer anderen Stelle ein- und ausschalten können, um es zu testen und zu debuggen und so weiter.

3
Otto

Sie könnten versuchen, Wordpress Mu Domain Mapping Plugin.

Update

Eigentlich passt es besser zu Ihrer Anfrage, wp-blog-header.php oben in Ihre PHP-Datei Ihrer Subdomain aufzunehmen, damit Sie auch die Template-Funktionen laden können.

    include(dirname(__FILE__) . "/../path_to_my_blog/wp-blog-header.php");

Oder du kannst ein wp_redirect nach dem Include von wp-load.php machen

2
konus

Ich habe das Gleiche versucht wie in dieser Frage und konnte die Umleitung erst umgehen, nachdem ich die $ _SERVER-Vars gefälscht habe, bevor ich wp-load.php eingefügt habe:

define('WP_USE_THEMES', false);
define( 'DOMAIN_CURRENT_SITE', $siteRow['domain'] );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', $siteRow['wp_blog_id'] );

$_SERVER = array(
    "HTTP_Host" => $siteRow['domain'],
    "SERVER_NAME" => $siteRow['domain'],
    "REQUEST_URI" => "/",
    "REQUEST_METHOD" => "GET"
);

Das Array $ siteRow ist meine eigene Site-Konfiguration. Aktualisieren Sie die Variablen mit dem, was Sie benötigen. Keine Weiterleitung, und alle WP Funktionen stehen zu Ihrer Verfügung! Genießen.

0
Dunhamzzz

Ich verwende derzeit eine switch-Anweisung, um die DOMAIN_CURRENT_SITE festzulegen

Ich habe es so eingerichtet, dass es funktioniert, wenn es auf dem Live-Server bereitgestellt wird. Der Schalter legt außerdem DOMAIN_CURRENT_SITE fest, wenn ich lokal auf meinem Entwicklungscomputer arbeite. (also alle .dev Top Level Domains)

Nach der switch-Anweisung definiere ich die anderen Dinge, die sich nicht ändern, aber MULTISITE-bezogen sind.

switch ($_SERVER['SERVER_NAME']) {
    case 'sub1.mydomain.com':
    case 'sub2.mydomain.com':
    case 'community.mydomain.com':
        define('DOMAIN_CURRENT_SITE', 'community.mydomain.com');
        break;
    case 'sub1.mydomain.dev':
    case 'sub2.mydomain.dev':
    case 'community.mydomain.dev':
        define('DOMAIN_CURRENT_SITE', 'community.mydomain.dev');
        break;
    default:
        define('DOMAIN_CURRENT_SITE', 'community.mydomain.com');
        break;
}

define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

Natürlich enthält diese wp-config.php-Datei mehr Einstellungen, aber ich habe diese nicht hinzugefügt, da sie nicht spezifisch für WP MULTISITE-Installationen sind.

Hinweis: Wenn Sie lokal arbeiten (nachdem Sie die neueste SQL-Datei heruntergeladen haben. Ich muss massive Such- und Ersetzungsvorgänge in der Datenbank ausführen. Dies hat etwas nichts mit Ihrer spezifischen Frage zu tun, aber ich lasse das wp-cli.org-Snippet unten)

wp search-replace 'community.mydomain.com' 'community.mydomain.dev' --network --dry-run
wp search-replace 'sub1.mydomain.com' 'sub1.mydomain.dev' --network --dry-run
wp search-replace 'sub2.mydomain.com' 'sub2.mydomain.dev' --network --dry-run
0
andxyz