¿Hay una manera de definir los dominios wp_blogs en wp-config?

4

En mi configuración de sitios múltiples tengo varios entornos en los que quiero compartir la misma base de datos, pero uso diferentes dominios.

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

... cada uno de ellos apuntaría a la misma base de datos. Esto funciona perfectamente bien en una instalación estándar de WP usando define( 'WP_HOME', 'http://server1.example.com' ); y define( 'WP_SITEURL', 'http://server1.example.com' ); .

Cuando agrega multisitio a la mezcla, se rompe.

El problema es que la tabla wp_blogs también define los dominios, por lo que necesito una forma de definirlos en el archivo de configuración. ¿Hay alguna forma de hacer eso?

    
pregunta developdaly 19.11.2012 - 15:00

2 respuestas

5

Cuando WordPress carga varios sitios, incluye los archivos específicos de MS relevantes en wp-settings.php

Las líneas relevantes:

<?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 tiene un propósito similar al de wp-settings.php : carga el entorno multisitio y, lo que es más importante para nuestros propósitos, configura el sitio actual (colección de blogs) y el blog. Pero también hay estas pocas gemas:

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
}

Lo más importante: if(defined('SUNRISE')) . Esto le permite colocar un archivo sunrise.php en su directorio wp-content . Se incluye si define('SUNRISE', true); en su wp-config.php . Este archivo es el mismo que se usa para la asignación de dominios para configurar el sitio actual y el blog según los dominios personalizados. Puede usarlo para configurar su propio sitio y blog en lugar de dejar que WordPress lo haga por usted.

Ejemplo rápido: esto funciona bien, pero probablemente necesite algunas mejoras.

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

Dado que @kaiser es probable que suene para decir que $_SERVER['HTTP_HOST'] no es confiable, es posible que desee hacer Seguro que tu servidor realmente lo tiene disponible.

O haz algo como esto ...

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

Puedes colocar el sunrise.php anterior en tu instalación local y poner define('SUNRISE', true); en la configuración wp de tu local.

    
respondido por el chrisguitarguy 26.11.2012 - 22:21
1

No estoy seguro de si esto responde a tu pregunta, pero encontré esto: enlace

    
respondido por el daresayer 20.11.2012 - 15:23

Lea otras preguntas en las etiquetas