Problema
Estoy a punto de embarcarme en un 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 desarrollándose localmente)
Con 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) misma base de datos sin muchos problemas (aparte de tener que sincronizar ocasionalmente carpetas de cargas)
Mi pregunta es, con WordPress, ¿qué nos impide usar este mismo enfoque y cómo podemos resolver estos problemas?
p.ej. Tres copias de WordPress se ejecutan todas en la misma base de datos.
http: //dev.local/developer-a/
http: //dev.local/developer-b/
http: //dev.local/developer-c/
etc.
Espero que sea evidente que esto solo será en un entorno de desarrollo antes del lanzamiento.
Temas principales
- Referencias a URL específicas dentro de la base de datos (
wp_posts
ywp_options
tablas al parecer) - Si una persona instala un complemento, las otras instalaciones no lo tendrán y causarán problemas de concurrencia en la base de datos
- Mantener las carpetas cargadas sincronizadas
Solución actual
Actualmente tengo el comienzo de una solución para el primer problema. Coloco lo siguiente en un archivo en mi carpeta de plugins mu.
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 de inicio y siteurl a través de php usando el entorno donde está instalado WordPress para resolverlas. (una vez más, esto es solo para desarrollo) Esto significa que para cada instalación individual, el contenido de publicación de WordPresses parecerá que se está ejecutando en esa URL para cuando 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');
}
Los problemas segundo y tercero parecen resolverse 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 todos modos? ¿Hay algo que me haya perdido que tenga la URL codificada en la base de datos?
¿Algún inconveniente que debería tener en cuenta con el enlace simbólico?
¿Algún otro problema que alguien pueda pensar?
Me doy cuenta de que estas preguntas son muy específicas, si algo no está claro, comente sobre esto y lo enmendaré / aclararé.
Gracias.