Isu
Saya akan memulai beberapa pengembangan WordPress di lingkungan tim multi-orang. (3 orang atau lebih yang bekerja pada basis kode yang sama pada satu waktu, masing-masing berkembang secara lokal)
Dengan CMS lain yang telah bekerja sama dengan kami, semua orang telah menunjuk instalasi mereka di database yang sama dan karena bagaimana CMS / database itu bekerja, itu berarti kita semua dapat memiliki konten yang sama yang dimasukkan ke dalam instalasi kami (terletak di url berbeda) dari database yang sama tanpa banyak masalah (selain kadang-kadang harus menyinkronkan folder unggahan)
Pertanyaan saya adalah, dengan WordPress, apa yang mencegah kami menggunakan pendekatan yang sama ini dan bagaimana kami bisa menyelesaikan masalah ini?
misalnya. Tiga salinan WordPress semuanya lari dari database yang sama.
http: //dev.local/developer-a/
http: //dev.local/developer-b/
http: //dev.local/developer-c/
dll
Saya harap tak usah dikatakan bahwa ini hanya akan berada di lingkungan pengembangan sebelum diluncurkan.
Masalah utama
- Referensi ke url tertentu dalam database (
wp_posts
danwp_options
tampaknya tabel) - Jika satu orang memasang plugin, yang lain tidak akan memilikinya dan akan menyebabkan masalah konkurensi dalam database
- Menyimpan folder unggahan dalam sinkronisasi
Solusi Saat Ini
Saat ini saya memiliki awal solusi untuk masalah pertama di tempat. Saya menempatkan berikut ini di file di folder mu-plugins saya.
Kode dasarnya memfilter konten posting saat masuk dan keluar dari database dengan mengganti setiap instance dari url dengan token unik.
<?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');
Saya telah menetapkan opsi home dan siteurl via php menggunakan lingkungan tempat WordPress diinstal untuk menyelesaikannya. (Sekali lagi, ini hanya untuk pengembangan) Ini berarti bahwa untuk setiap individu menginstal konten posting WordPress akan terlihat seperti berjalan di url itu pada saat itu sampai ke klien.
<?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');
}
Masalah kedua dan ketiga tampaknya dapat dipecahkan dengan symlink yang sesuai (semua berkembang pada mesin yang sama)
Pertanyaan Aktual
Bisakah saya meningkatkan penanganan url yang berbeda? Apakah ada sesuatu yang saya lewatkan yang akan memiliki url hardcoded ke dalam database?
Adakah gotcha yang harus saya ketahui dengan symlinking?
Ada masalah lain yang bisa dipikirkan siapa pun?
Saya menyadari pertanyaan-pertanyaan ini sangat spesifik, jika ada yang tidak jelas, komentari ini dan saya akan mengubah / mengklarifikasi.
Terima kasih.
sumber
Pertanyaan 1: URL Anda masuk dan keluar dari database di lebih banyak tempat daripada hanya konten posting. Saya menemukan URL di
*_postmeta
,,*_comments
dan*_options
(selain yang Anda tentukan). Ini tidak termasuk aktivitas plugin dan aktivitas Custom Meta Field .Pertanyaan 2: Saya kadang-kadang juga akan menghubungkan plugin untuk kenyamanan, dan sebagian besar waktu berfungsi. Terkadang tidak. Saya tidak bisa memberi tahu Anda kondisi pasti yang menyebabkan masalah tetapi Javascript tampaknya menjadi faktor.
Pertanyaan 3: Saya akan mengharapkan masalah dengan
*_options
meja jika ada. Hal-hal seperti plugin yang diaktifkan dan tema yang aktif disimpan di sana, di antara banyak informasi lainnya cukup spesifik untuk situs tertentu.sumber