Questão
Estou prestes a embarcar em algum desenvolvimento do WordPress em um ambiente de equipe para várias pessoas. (3 ou mais pessoas trabalhando na mesma base de código por vez, cada uma desenvolvendo localmente)
Com outros CMSs com os quais trabalhamos, todos apontaram suas instalações para o mesmo banco de dados e, devido ao modo como o CMS / banco de dados funcionou, isso significa que todos podemos ter o mesmo conteúdo alimentando nossas instalações (localizadas em URLs diferentes). mesmo banco de dados sem muitos problemas (além de precisar ocasionalmente sincronizar 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, todas rodando no mesmo banco de dados.
http: //dev.local/developer-a/
http: //dev.local/developer-b/
http: //dev.local/developer-c/
etc
Espero que seja desnecessário dizer que isso ocorrerá apenas em um ambiente de desenvolvimento antes do lançamento.
Questões principais
- Referências a URLs específicos no banco de dados (
wp_posts
ewp_options
tabelas, ao que parece) - Se uma pessoa instalar um plug-in, as outras instalações não o terão e causarão problemas de simultaneidade no banco de dados
- Mantendo as pastas de uploads sincronizadas
Solução Atual
Atualmente, tenho o início de uma solução para o primeiro problema. Coloco o seguinte em um arquivo na pasta mu-plugins.
O código filtra essencialmente 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 em que o WordPress está instalado para resolvê-las. (novamente, isso é apenas para desenvolvimento) Isso significa que, para cada instalação individual, o conteúdo da postagem do WordPress parecerá estar em execução 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 o terceiro problemas parecem solucionáveis com os links simbólicos apropriados (todos desenvolvidos na mesma máquina)
Perguntas reais
Posso melhorar minha maneira de lidar com os diferentes URLs? Existe alguma coisa que eu perdi que tenha o URL codificado no banco de dados?
Alguma dica que eu deveria estar ciente com o link simbólico?
Quaisquer outros problemas em que alguém possa pensar?
Sei que essas perguntas são muito específicas, se algo não estiver claro, comente isso e vou alterar / esclarecer.
Obrigado.