Problema
Estou prestes a embarcar em algum desenvolvimento WordPress em um ambiente de equipe multi-pessoa. (3 ou mais pessoas trabalhando na mesma base de código de cada vez, cada uma desenvolvendo localmente)
Com outros CMSs com os quais já trabalhamos, todos apontaram suas instalações no mesmo banco de dados e por causa de como o CMS / banco de dados funcionou, isso significa que todos nós podemos ter o mesmo conteúdo alimentado em nossas instalações (localizados em URLs diferentes) ) do mesmo banco de dados sem muito problema (além de ocasionalmente ter que sincronizar as pastas de uploads)
Minha pergunta é, com o WordPress, o que nos impede de usar essa mesma abordagem e como podemos resolver esses problemas?
por exemplo. Três cópias do WordPress são todas executadas no mesmo banco de dados.
enlace
enlace
enlace
etc
Espero que seja desnecessário dizer que isso será apenas em um ambiente de desenvolvimento antes do lançamento.
Principais problemas
- Referências a URLs específicos no banco de dados (
wp_posts
e wp_options
tabelas, parece)
- Se uma pessoa instalar um plug-in, as outras instalações não terão e causarão problemas de simultaneidade no banco de dados
- Manter carregamentos de pastas sincronizadas
Solução atual
Atualmente, tenho o início de uma solução para o primeiro problema em vigor. Coloco o seguinte em um arquivo na minha pasta mu-plugins.
O código essencialmente filtra o conteúdo da postagem à medida que entra e sai do banco de dados, substituindo qualquer instância da URL por um token exclusivo.
<?php
define('PORTABILITY_TOKEN', '{_portable_}');
function portability_remove_home($content)
{
$content = str_replace(get_option('home'), PORTABILITY_TOKEN, $content);
return $content;
}
add_filter('content_save_pre', 'portability_remove_home');
function portability_add_home($content)
{
$content = str_replace(PORTABILITY_TOKEN, get_option('home'), $content);
return $content;
}
add_filter('the_content', 'portability_add_home');
add_filter('the_editor_content', 'portability_add_home');
Eu configurei as opções home e siteurl via php usando o ambiente de onde o WordPress está instalado para resolvê-las. (novamente, isso é apenas para desenvolvimento) Isso significa que para cada instalação individual, WordPresses postar conteúdo parecerá que está sendo executado nesse URL no momento em que chegar ao cliente.
<?php
if (!defined('WP_HOME'))
{
// define WP_HOME (aka url of install) based on environment.
// IF THIS ISN'T WORKING, DEFINE IT EARLIER.
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . str_replace($_SERVER['DOCUMENT_ROOT'], '', dirname(__FILE__) ) );
}
if (!defined('WP_SITEURL'))
{
// Assumes WordPress is in a separate directory called 'wp', relative to WP_HOME.
// IF IT'S DIFFERENT, DEFINE IT EARLIER.
define('WP_SITEURL', WP_HOME . '/wp');
}
O segundo e terceiro problemas parecem solucionáveis com os links simbólicos apropriados (todos em desenvolvimento na mesma máquina)
Perguntas reais
-
Posso melhorar meu manuseio de URLs diferentes de qualquer maneira? Existe alguma coisa que eu perdi que terá o url codificado no banco de dados?
-
Alguma dica de que eu deveria estar ciente com o symlinking?
-
Quaisquer outros problemas em que alguém possa pensar?
Sei que essas perguntas são muito específicas, se alguma coisa não estiver clara, comente sobre isso e eu vou corrigir / esclarecer.
Obrigado.