¿Cómo puedo hacer que una base de datos de WordPress sea portátil e independiente de url?

9

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.

enlace
enlace
enlace

etc

Espero que no sea necesario decir que esto solo ocurrirá en un entorno de desarrollo antes del lanzamiento.

Problemas principales

  1. Referencias a direcciones URL específicas dentro de la base de datos (parece que las tablas wp_posts y wp_options )
  2. Si una persona instala un complemento, la otra instalación no lo tendrá y causará problemas de concurrencia en la base de datos
  3. 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

  1. ¿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?

  2. ¿Hay algún error que deba tener en cuenta con la vinculación?

  3. ¿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.

    
pregunta navitronic 17.08.2012 - 09:14

2 respuestas

2

Responderé a la pregunta 2, tenga en cuenta que algunos valores en la base de datos se almacenan en arreglos serializados. Por ejemplo, si la longitud de la cadena de su URL cambia y está en una matriz serializada, entonces necesita actualizar el índice para ella.

Puede usar este script PHP para actualizar todos los valores en matrices en serie, o ejecútelo desde el comando línea en tu propio script

    
respondido por el davemac 22.08.2012 - 02:55
1

Pregunta 1: Tienes URL entrando y saliendo de la base de datos en más lugares que solo el contenido de la publicación. Encontré las URL en *_postmeta , *_comments y *_options (además de las que definiste). Esto no incluye la actividad del complemento y la actividad del campo meta personalizado .

Pregunta 2: a veces también incluiré enlaces simbólicos para mayor comodidad, y la mayoría de las veces funciona. A veces no es así. No puedo decirle las condiciones exactas que causan un problema, pero Javascript parece ser un factor.

Pregunta 3: esperaría problemas con la tabla *_options en todo caso. Cosas como los complementos activados y el tema activo se guardan allí, entre otra gran cantidad de información que es bastante específica del sitio.

    
respondido por el s_ha_dum 18.10.2012 - 02:56

Lea otras preguntas en las etiquetas