Problema
Estoy a punto de embarcarme en el desarrollo de WordPress en un entorno de equipo de varias personas. (3 o más personas trabajando en la misma base de código a la vez, cada una desarrollada localmente)
Con los otros CMS con los que hemos trabajado, todos han apuntado sus instalaciones a la misma base de datos y, debido a cómo ha funcionado ese CMS / base de datos, ha significado que todos podamos tener el mismo contenido en nuestras instalaciones (ubicadas en diferentes URL). ) desde la misma base de datos sin muchos problemas (aparte de tener que sincronizar las carpetas de las subidas)
Mi pregunta es, con WordPress, ¿qué nos impide utilizar este mismo enfoque y cómo podemos resolver estos problemas?
por ejemplo. Tres copias de WordPress todas ejecutándose en la misma base de datos.
etc
Espero que no sea necesario decir que esto solo ocurrirá en un entorno de desarrollo antes del lanzamiento.
Problemas principales
- Referencias a direcciones URL específicas dentro de la base de datos (parece que las tablas
wp_posts
ywp_options
) - Si una persona instala un complemento, la otra instalación no lo tendrá y causará problemas de concurrencia en la base de datos
- Mantener las carpetas cargadas sincronizadas
Solución actual
Actualmente tengo los principios de una solución para el primer problema en su lugar. Coloco lo siguiente en un archivo en mi carpeta de mu-plugins.
El código esencialmente filtra el contenido de la publicación a medida que entra y sale de la base de datos al reemplazar cualquier instancia de la URL con un token único.
<?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');
He configurado las opciones home y siteurl a través de php usando el entorno donde se instala WordPress para resolverlas. (de nuevo, esto es solo para desarrollo) Esto significa que para cada instalación individual, el contenido de la publicación de WordPresses se verá como si se estuviera ejecutando en esa url en el momento en que llegue al 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');
}
El segundo y tercer problema parecen solucionarse con los enlaces simbólicos apropiados (todos se desarrollan en la misma máquina)
Preguntas reales
-
¿Puedo mejorar mi manejo de las diferentes URL de alguna manera? ¿Hay algo que haya omitido que tenga la url codificada en la base de datos?
-
¿Hay algún error que deba tener en cuenta con la vinculación?
-
¿Alguna otra cuestión que se pueda imaginar?
Me doy cuenta de que estas preguntas son muy específicas, si algo no está claro, comente esto y lo enmendaré / aclararé.
Gracias.