ปัญหา
ฉันกำลังจะเริ่มดำเนินการกับการพัฒนา WordPress ในสภาพแวดล้อมแบบทีมหลายคน (3 คนขึ้นไปที่ทำงานบนฐานข้อมูลเดียวกันในแต่ละครั้งพัฒนาในพื้นที่)
ด้วย CMS อื่น ๆ ที่เราทำงานด้วยทุกคนชี้การติดตั้งของพวกเขาที่ฐานข้อมูลเดียวกันและเนื่องจาก CMS / ฐานข้อมูลนั้นทำงานอย่างไรนั่นหมายความว่าเราทุกคนสามารถมีเนื้อหาเดียวกันในการติดตั้งของเรา (ตั้งอยู่ที่ URL ที่แตกต่าง) ฐานข้อมูลเดียวกันโดยไม่มีปัญหามาก (นอกเหนือจากบางครั้งต้องซิงค์โฟลเดอร์ที่อัปโหลด)
คำถามของฉันคือด้วย WordPress สิ่งที่ป้องกันไม่ให้เราใช้วิธีการเดียวกันนี้และเราจะแก้ไขปัญหาเหล่านี้ได้อย่างไร
เช่น. WordPress สามชุดทั้งหมดทำงานจากฐานข้อมูลเดียวกัน
http: //dev.local/developer-a/
http: //dev.local/developer-b/
http: //dev.local/developer-c/
ฯลฯ
ฉันหวังว่ามันจะไปโดยไม่บอกว่าจะอยู่ในสภาพแวดล้อมการพัฒนาก่อนเปิดตัวเท่านั้น
ประเด็นหลัก
- การอ้างอิงถึง URL เฉพาะภายในฐานข้อมูล (
wp_posts
และwp_options
ตารางที่ปรากฏ) - หากมีคนหนึ่งติดตั้งปลั๊กอินการติดตั้งอื่นจะไม่มีและจะทำให้เกิดปัญหาการทำงานพร้อมกันในฐานข้อมูล
- ทำให้โฟลเดอร์ที่อัปโหลดซิงค์อยู่เสมอ
ทางออกปัจจุบัน
ขณะนี้ฉันมีจุดเริ่มต้นของการแก้ปัญหาสำหรับปัญหาแรกที่เกิดขึ้น ฉันวางสิ่งต่อไปนี้ในไฟล์ในโฟลเดอร์ 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');
ฉันได้ตั้งค่าตัวเลือก 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');
}
ปัญหาที่สองและสามดูเหมือนจะแก้ไขได้ด้วย symlink ที่เหมาะสม (ทั้งหมดพัฒนาบนเครื่องเดียวกัน)
คำถามจริง
ฉันสามารถปรับปรุงการจัดการ URL ที่ต่างกันได้อย่างไร มีอะไรที่ฉันพลาดไปหรือเปล่าที่จะมี urc hardcoded ในฐานข้อมูล?
gotchas ใด ๆ ที่ฉันควรทราบด้วย symlinking?
ปัญหาอื่นใดที่ทุกคนคิดได้
ฉันรู้ว่าคำถามเหล่านี้เฉพาะเจาะจงมากหากมีสิ่งใดไม่ชัดเจนแสดงความคิดเห็นเกี่ยวกับเรื่องนี้และฉันจะแก้ไข / ชี้แจง
ขอบคุณ