Configurando uma rede wordpress com domínios de terceiro nível

10

Eu tenho procurado configurar uma instalação de rede do WordPress. Tudo está indo muito bem até chegar ao ponto em que o layout do meu domínio desejado não se encaixa bem.

Eu gostaria de ter um layout da seguinte forma:

blog. *. stackexchange.com

Por exemplo, gostaria de ter vários sites em uma rede semelhantes a:

blog.wordpress.stackexchange.com
blog.apple.stackexchange.com
blog. $ site.stackexchange.com

Eu acho que eu poderia trabalhar com algumas regras de reescrita criativas e intervenção manual do DNS, mas eu prefiro ter uma configuração onde eu possa entregar a criação de tudo, mas o DNS para outra pessoa (já temos um processo para criar automaticamente todos os subdomínios necessários no DNS)

A partir do meu brincar e ler o WP realmente quer que os sites sejam o domínio do próximo nível, no meu exemplo acima, ele quer que o blog principal do WP esteja no stackexchange.com e nos blogs da rede estar em wordpress.stackexchange.com.

Existe alguma maneira de alcançar o meu efeito desejado ou devo apenas seguir o caminho de fazer blog.stackexchange.com/$site?

    
por Zypher 18.03.2011 / 05:27

2 respostas

2

Você pode usar o plugin Domain Mapper para isso. Desvantagem sendo que você teria configurado manualmente cada subblog.

    
por Wietse Venema 18.03.2011 / 08:03
1

Você pode fazer isso com um arquivo sunrise.php personalizado. Isto é essencialmente como o plugin de mapeamento de domínio funciona, no entanto, coloca uma boa parte de frente nele. Para algo personalizado, você pode escrever algum PHP simples para fazer basicamente a mesma coisa.

A essência do multisite envolve descobrir o site a ser veiculado. O plug-in de mapeamento de domínio faz isso criando uma tabela wp_domain_mapping e armazenando as informações nela. Assim, quando recebe uma solicitação para xxx.com, ele procura nessa tabela e vê que isso corresponde a blog_id 123.

Primeiro, faça uma configuração do WordPress e torne-a multisite. Não importa onde ele realmente vive, porque nós vamos mudar tudo isso. Para simplificar, eu colocaria em blog.stackexchange.com e tornaria um site do tipo subdiretório (esses são mais fáceis). Os subdiretórios criados provavelmente seriam as lesmas. / wordpress, / apple, / whatever.

Então, sim, para começar, você está realmente fazendo isso ao vivo em blog.stackexchange.com/wordpress. Considere este seu ambiente de preparação. Quando você cria cada site, você pode fazer coisas aqui até decidir ativar o mapeamento.

Para fazer o mapeamento de domínio sozinho, sem o plug-in, você faria algo assim:

Passo um: adicione define( 'SUNRISE', 'on' ); ao topo do seu arquivo wp-config.php.

Etapa dois: crie um arquivo sunrise.php no diretório wp-content. Coloque <?php no topo para começar.

Etapa 3: no arquivo sunrise.php, sua lógica será determinar qual site será carregado.

Você baseará isso na variável $_SERVER[ 'HTTP_HOST' ] . Como você faz isso é fácil: você quer fazer isso. Se você quer apenas escrever um regex para procurar por '/blog\.(.*)\.stackexchange\.com/' e então procurar aquele bit no banco de dados, você pode fazer isso.

Como você está usando o mesmo slug aqui como o "subdiretório", não precisa de uma tabela separada. Você pode simplesmente consultar a tabela principal do wp_blogs para encontrar o site de que precisa. Algo semelhante a isto:

$current_blog = $wpdb->get_var( "SELECT blog_id FROM {$wpdb->blogs} WHERE path = '/wordpress/' LIMIT 1" );

Depois de ter o $ current_blog, você precisa do seguinte código:

$current_blog->domain = $_SERVER[ 'HTTP_HOST' ];
$current_blog->path = '/';
$blog_id = $current_blog->blog_id;
$site_id = $current_blog->site_id;
$current_site = $wpdb->get_row( "SELECT * from {$wpdb->site} WHERE id = '{$current_blog->site_id}' LIMIT 0,1" );
$current_site->blog_id = $current_blog->blog_id;

Isso pré-define as variáveis globais $ current_blog e $ current_site em vez de permitir que as funções do MU do WordPress o façam.

Isso seria o suficiente para colocar o site em funcionamento (depois de fazer com que seu DNS apontasse e obter as coisas de hospedagem virtual separadas), no entanto, a maioria das URLs estáticas usadas no código HTML ainda apontaria para o blog. stackexchange.com/wordpress, já que é onde o site realmente estaria. Além disso, a função de URL da Canonical provavelmente não gostará da URL e também o redirecionaria.

Para solucionar esses problemas, você provavelmente também desejaria predefinir vários dos URLs associados ao site. Coisas como WP_SITEURL e WP_HOME. Além disso, WP_CONTENT_URL, WP_PLUGIN_URL e WPMU_PLUGIN_URL. Isso deve abranger a maioria dos casos dos URLs que estão sendo ajustados.

Finalmente, você vai querer definir o 'COOKIE_DOMAIN'. Como você provavelmente deseja que os logins sejam compartilhados em toda a coisa, você pode configurá-lo para stackexchange.com, ou até mais, se não quiser que eles sejam logins compartilhados.

Se você quiser falar sobre a integração do sistema normal de login do stackexchange no WordPress, posso responder a perguntas sobre isso também, mas seria um pouco mais detalhado de uma resposta. :)

Sinta-se à vontade para me enviar um email se quiser mais ajuda com isso. Fico feliz em ajudar: otto em wordpress.org.

    
por Otto 29.07.2011 / 00:42