Bir WordPress veritabanını taşınabilir ve URL'den nasıl bağımsız hale getirebilirim?


9

Konu

Çok kişilik bir ekip ortamında bazı WordPress geliştirmelerine başlamak üzereyim. (Her biri yerel olarak gelişen, aynı kod tabanında aynı anda çalışan 3 veya daha fazla kişi)

Çalıştığımız diğer CMS'lerle, herkes yüklemelerini aynı veritabanına işaret etti ve bu CMS / veritabanı nasıl çalıştığından, yüklemelerimize (farklı URL'lerde bulunan) aynı içeriğin beslenmesinden hepimiz anlamına geliyordu. aynı veritabanı çok fazla sorun olmadan (zaman zaman yükleme klasörlerini senkronize etmek zorunda kalmadan)

Benim sorum WordPress ile aynı yaklaşımı kullanmamızı engelleyen nedir ve bu sorunları nasıl çözebiliriz?

Örneğin. Aynı veritabanında üç WordPress kopyası çalışıyor.

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

vb

Umarım bu sadece lansmandan önce bir geliştirme ortamında olacaktır.

Ana konular

  1. Veritabanı içindeki belirli URL'lere ( wp_postsve wp_optionsgöründüğü tablolara) referanslar
  2. Bir kişi bir eklenti yüklerse, diğer yüklemeler buna sahip olmaz ve veritabanında eşzamanlılık sorunlarına neden olur
  3. Yüklenen klasörleri senkronize tutma

Mevcut Çözüm

Şu anda ilk sorun için bir çözüm başlangıcı var. Aşağıdakileri mu-plugins klasörümdeki bir dosyaya yerleştiriyorum.

Kod, URL'nin herhangi bir örneğini benzersiz bir jetonla değiştirerek posta içeriğini veritabanına girip çıkarken filtreler.

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

WordPress'in çalıştığı ortamı kullanarak php üzerinden ev ve siteurl seçeneklerini ayarladım. (yine, bu sadece geliştirme amaçlıdır) Bu, her bir yükleme için WordPresses yazı içeriğinin, istemciye ulaştığında o url'de çalıştığı gibi görüneceği anlamına gelir.

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

İkinci ve üçüncü konular uygun sembollerle çözülebilir gibi görünüyor (hepsi aynı makinede gelişiyor)

Gerçek Sorular

  1. Farklı URL'lerle ilgili işlemimi yine de iyileştirebilir miyim? URL veritabanına sabit kodlanmış olacak kaçırdığım bir şey var mı?

  2. Symlinking ile bilmem gereken var mı?

  3. Herkesin düşünebileceği başka konular var mı?

Bu soruların çok spesifik olduğunu anlıyorum, eğer bir şey net değilse, bu konuda yorum yapın ve değiştireceğim / açıklayacağım.

Teşekkürler.

Yanıtlar:


2

Soru 2'ye cevap vereceğim, veritabanındaki bazı değerlerin serileştirilmiş dizilerde saklandığını unutmayın. Örneğin, URL dizenizin uzunluğu değişirse ve serileştirilmiş bir dizideyse, dizinin dizinini güncellemeniz gerekir.

Serileştirilmiş dizilerdeki tüm değerleri güncellemek için bu PHP komut dosyasını kullanabilir veya kendi komut dosyanızdaki komut satırından çalıştırabilirsiniz


Beni PHP betiğinin yönüne işaret ettiğiniz için gecikmiş bir teşekkürler. WordPress ile ilgili başka bir görevde yaşadığım birkaç sorunu çözdü.
navitronic

1

Soru 1: Veritabanına yalnızca içerikten daha fazla yerde giren ve çıkan URL'ler var. Ben URL'leri buldum *_postmeta, *_commentsve *_options(eğer tanımlı olanları ek olarak). Bu, eklenti etkinliği ve Özel Meta Alanı etkinliği sayılmaz .

Soru 2: Bazen kolaylık sağlamak için eklentileri de ekleyeceğim ve çoğu zaman çalışır. Bazen olmaz. Size bir soruna neden olan koşulları tam olarak söyleyemem ama Javascript bir faktör gibi görünüyor.

Soru 3: Bir *_optionsşey olursa masa ile ilgili sorun beklerim. Etkinleştirilmiş eklentiler ve aktif tema gibi şeyler orada tutulur, diğer birçok bilgi arasında siteye özeldir.


Soru 3'te haklısın, bunun temel olarak bu tablodaki serileştirilmiş bir formda saklanan şeylerden kaynaklandığını düşünüyorum, bu da dikkatli değilseniz kırılabilir.
navitronic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.