Як я можу зробити базу даних WordPress портативною та URL-адресою незалежною?


9

Проблема

Я збираюся розпочати розробку WordPress у командному середовищі для багатьох людей. (3 і більше людей, які працюють над однією і тією ж базою кодів одночасно, кожен розвивається локально)

З іншими CMS, з якими ми працювали, кожен вказав на свої встановлення на ту саму базу даних, і тому, як ця CMS / база даних працювала, це означає, що ми можемо мати один і той же вміст, що подається в наші інсталяції (розташовані з різними URL-адресами) від та сама база даних без особливих проблем (за винятком випадків, коли потрібно синхронізувати папки для завантаження)

Моє запитання, що стосується WordPress, що заважає нам використовувати цей самий підхід і як ми можемо вирішити ці проблеми?

напр. Три копії WordPress, усі вони працюють із однієї бази даних.

http: //dev.local/developer-a/
http: //dev.local/developer-b/
http: //dev.local/developer-c/

тощо

Я сподіваюся, що само собою зрозуміло, що це буде лише в середовищі розробки до запуску.

Основні питання

  1. Посилання на конкретні URL-адреси в базі даних ( wp_postsі wp_optionsтаблиці, здається)
  2. Якщо одна людина встановить плагін, інший встановить його не буде, і це спричинить проблеми одночасності в базі даних
  3. Синхронізація зберігання папок

Поточне рішення

Наразі у мене є початки рішення першого питання. Я розміщую наступне у файлі у своїй папці mu-plugins.

Код по суті фільтрує вміст публікації, коли він потрапляє в базу даних і виходить, замінюючи будь-який примірник URL-адресою унікальним маркером.

<?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');

Я встановив параметри дому та siteurl через php, використовуючи середовище, де встановлено WordPress, щоб їх розробити. (знову ж таки, це лише для розробки) Це означає, що для кожної окремо встановленої WordPress публікації вміст буде виглядати так, як він працює на цій URL-адресі до моменту, коли він потрапить до клієнта.

<?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');
}

Другий та третій питання видаються вирішуваними відповідними символьними посиланнями (усі розвиваються на одній машині)

Актуальні запитання

  1. Чи можу я в будь-якому разі вдосконалити обробку різних URL-адрес? Чи є щось, що я пропустив, що дозволило б ввести URL-адресу в базу даних?

  2. Будь-які готчі, про які я маю знати з символікою?

  3. Будь-які інші питання, про які хтось може придумати?

Я усвідомлюю, що ці питання є дуже конкретними, якщо щось незрозуміле, прокоментуйте це, і я внесу зміни та уточнення.

Дякую.

Відповіді:


2

Я відповім на питання 2, майте на увазі, що деякі значення в базі даних зберігаються в серіалізованих масивах. Наприклад, якщо довжина рядка вашої URL-адреси змінюється і вона знаходиться в серіалізованому масиві, то вам потрібно оновити індекс для неї.

Ви можете використовувати цей скрипт PHP для оновлення всіх значень у серіалізованих масивах або запустити його з командного рядка у власному сценарії


Запізнілий спасибі за те, що я вказав мені в напрямку цього сценарію PHP. Це вирішило декілька питань, з якими я стикався з іншим завданням WordPress.
навитроник

1

Питання 1. У вас є URL-адреси, що надходять і виходять із бази даних в більшій кількості місць, ніж просто вміст публікації. Я знайшов URL-адреси в *_postmeta, *_commentsі *_options(окрім вказаних вами). Це не враховує активність плагінів та користувацьку мета-поле .

Запитання 2: Я також інколи буду символізувати плагіни для зручності, і більшу частину часу це працює. Іноді це не так. Я не можу сказати точні умови, які викликають проблему, але Javascript, здається, є фактором.

Питання 3: Я б очікував проблем зі *_optionsстолом, якщо що. Такі речі, як активовані плагіни та активна тема, зберігаються там, серед безлічі іншої інформації є досить привабливий сайт.


Ви маєте рацію в питанні 3, я думаю, що це головним чином через те, що речі зберігаються в серіалізованому вигляді в цій таблиці, які можуть зламатися, якщо ви не будете обережні.
навитроник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.