Existe-t-il un moyen de définir les domaines wp_blogs dans wp-config?

4

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

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

... chacun de ces éléments pointe vers la même base de données. Cela fonctionne parfaitement dans une installation WP standard utilisant define( 'WP_HOME', 'http://server1.example.com' ); et define( 'WP_SITEURL', 'http://server1.example.com' ); .

Lorsque vous ajoutez un site multisite au mélange, il se casse.

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. Est-il possible de le faire?

    
posée developdaly 19.11.2012 - 15:00

2 réponses

5

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

Etant donné que @kaiser laissera probablement entendre que $_SERVER['HTTP_HOST'] n'est pas fiable, vous souhaiterez peut-être faire en sorte que que votre serveur l’a effectivement disponible.

Ou faites 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 la configuration wp de votre local.

    
réponse donnée chrisguitarguy 26.11.2012 - 22:21
1

Je ne sais pas si cela répond à votre question, mais j'ai trouvé ceci: enlace

    
réponse donnée daresayer 20.11.2012 - 15:23

Lire d'autres questions sur les étiquettes