web-dev-qa-db-de.com

Gibt es eine Möglichkeit, wp_blogs-Domänen in wp-config zu definieren?

In meinem Multisite-Setup habe ich mehrere Umgebungen, in denen ich dieselbe Datenbank freigeben möchte, aber unterschiedliche Domänen verwende.

  • server1.example.com
  • server2.example.com
  • example.com

... würde jeder auf die gleiche Datenbank verweisen. Dies funktioniert in einer WP Standardinstallation mit define( 'WP_HOME', 'http://server1.example.com' ); und define( 'WP_SITEURL', 'http://server1.example.com' ); einwandfrei.

Wenn Sie der Mischung mehrere Standorte hinzufügen, wird sie unterbrochen.

Das Problem ist, dass die wp_blogs-Tabelle die Domänen auch definiert, so brauche ich eine Möglichkeit, sie in der Konfigurationsdatei zu definieren. Gibt es sowieso dafür?

4
developdaly

Wenn WordPress Multisite lädt, enthält es die relevanten MS-spezifischen Dateien in wp-settings.php

Die relevanten Zeilen:

<?php
// Initialize multisite if enabled.
if ( is_multisite() ) {
    require( ABSPATH . WPINC . '/ms-blogs.php' );
    require( ABSPATH . WPINC . '/ms-settings.php' );
} elseif ( ! defined( 'MULTISITE' ) ) {
    define( 'MULTISITE', false );
}

ms-settings.php erfüllt einen ähnlichen Zweck wie wp-settings.php: Lädt die Umgebung mit mehreren Standorten und richtet - was für unsere Zwecke noch wichtiger ist - die aktuelle Site (Sammlung von Blogs) und das aktuelle Blog ein. Aber es gibt auch diese wenigen Edelsteine:

if ( defined( 'SUNRISE' ) )
    include_once( WP_CONTENT_DIR . '/sunrise.php' );

/** Check for and define SUBDOMAIN_INSTALL and the deprecated VHOST constant. */
ms_subdomain_constants();

if ( !isset( $current_site ) || !isset( $current_blog ) ) {
    // setup current site and blog
}

Am wichtigsten: if(defined('SUNRISE')). Auf diese Weise können Sie eine sunrise.php-Datei in Ihrem wp-content-Verzeichnis ablegen. Es wird eingeschlossen, wenn Sie define('SUNRISE', true); in Ihrem wp-config.php angeben. Diese Datei ist dieselbe, die für die Domänenzuordnung verwendet wird, um die aktuelle Site und das aktuelle Blog basierend auf den benutzerdefinierten Domänen einzurichten. Sie können es verwenden, um Ihre eigene Website und Ihr eigenes Blog einzurichten, anstatt WordPress dies für Sie tun zu lassen.

Schnelles Beispiel - das funktioniert in Ordnung, ist aber wahrscheinlich verbesserungswürdig.

<?php
// sunrise.php

$Host = $_SERVER['HTTP_Host'];

if('wpmscustom.dev' == $Host)
{
    // switch the Host.
    $Host = 'wpms.dev';
}

if(is_subdomain_install())
{
    $sql = $wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE domain = %s LIMIT 1", $Host);
}
else
{
    // this probably needs some work.
    $path = explode('/', ltrim($_SERVER['REQUEST_URI'], '/'));
    if(count($path))
        $path = '/' . $path[0];
    else
        $path = '/';

    $sql = $wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE domain = %s AND path = %s LIMIT 1", $Host, $path);
}

if($_blog = $wpdb->get_row($sql))
{
    $current_blog = $_blog;

    $blog_id = $_blog->blog_id;
    $site_id = $current_blog->site_id;

    // set current site
    $current_site = $wpdb->get_row(
        $wpdb->prepare("SELECT * from {$wpdb->site} WHERE id = %d", $site_id)
    );
    $current_site->blog_id = $blog_id;

    $current_site = get_current_site_name($current_site);
}

Da @kaiser wahrscheinlich sagen wird, dass $_SERVER['HTTP_Host'] unzuverlässig ist, sollten Sie sicherstellen, dass Ihr Server tatsächlich über diese Funktion verfügt.

Oder machen Sie so etwas ...

<?php
if(isset( $_SERVER['HTTP_Host']))
{
    $Host = $_SERVER['HTTP_Host'];
}
elseif(isset($_SERVER['SERVER_NAME']))
{
    $Host = $_SERVER['SERVER_NAME'];
}

Sie können den obigen sunrise.php in Ihre lokale Installation einfügen und define('SUNRISE', true); in die WP-Konfiguration Ihrer lokalen Installation einfügen.

5
chrisguitarguy

Nicht sicher, ob dies Ihre Frage beantwortet, aber ich habe Folgendes gefunden: http://wordpress.org/support/topic/multiple-domain-with-multisite

1
daresayer