web-dev-qa-db-fra.com

Est-il possible de définir des domaines wp_blogs dans wp-config?

Dans ma configuration multisite, je souhaite partager la même base de données dans plusieurs environnements mais utiliser des domaines différents.

  • serveur1.exemple.com
  • serveur2.exemple.com
  • exemple.com

... chacun d'entre eux pointerait vers la même base de données. Cela fonctionne parfaitement dans une installation standard de WP à l'aide de define( 'WP_HOME', 'http://server1.example.com' ); et define( 'WP_SITEURL', 'http://server1.example.com' );.

Lorsque vous ajoutez un multisite au mélange, cela se rompt.

Le problème est que la table wp_blogs définit également les domaines. J'ai donc besoin d'un moyen de les définir dans le fichier de configuration. Y'a-t'il un quelconque moyen d'y arriver?

4
developdaly

Lorsque WordPress charge un multisite, il inclut les fichiers spécifiques à MS pertinents dans wp-settings.php

Les lignes pertinentes:

<?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 a un objectif similaire à celui de wp-settings.php: charge l'environnement multisite et - plus important encore pour nos besoins - configure le site actuel (collection de blogs) et le blog. Mais il y a aussi ces quelques joyaux:

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
}

Le plus important: if(defined('SUNRISE')). Cela vous permet de déposer un fichier sunrise.php dans votre répertoire wp-content. Il est inclus si vous define('SUNRISE', true); dans votre wp-config.php. Ce fichier est le même que celui utilisé pour le mappage de domaine afin de configurer le site et le blog actuels en fonction des domaines personnalisés. Vous pouvez l'utiliser pour créer votre propre site et votre blog plutôt que de laisser WordPress le faire pour vous.

Exemple rapide - cela fonctionne bien, mais nécessite probablement quelques améliorations.

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

Étant donné que @ kaiser indiquera probablement que $_SERVER['HTTP_Host'] n'est pas fiable, vous voudrez peut-être vous assurer que votre serveur l'a effectivement disponible.

Ou faire quelque chose comme ça ...

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

Vous pouvez déposer le sunrise.php ci-dessus dans votre installation locale et mettre define('SUNRISE', true); dans votre wp-config local.

5
chrisguitarguy

Je ne sais pas si cela répond à votre question, mais j'ai trouvé ceci: http://wordpress.org/support/topic/multiple-domain-with-multisite

1
daresayer