คุณควรทำให้คลาสทั้งหมดของคุณเป็นอิสระจากตำแหน่งจริงของพวกเขาดังนั้นคุณสามารถย้ายพวกมันไปรอบ ๆ ได้อย่างง่ายดายและอาจนำมาใช้ซ้ำในโครงการอื่น ๆ
ฉันจะสร้างคลาสที่บอกคลาสอื่น ๆ ว่าจะใช้พา ธ หรือ URL อย่างไรให้มันใช้อินเทอร์เฟซเพื่อให้คุณสามารถนำคลาสอื่นมาใช้ซ้ำได้แม้กระทั่งในธีมหรือนอกเวิร์ดเพรสทั้งหมด
ตัวอย่างสำหรับอินเทอร์เฟซ:
interface DirectoryAddress
{
/**
* @return string Dir URL with trailing slash
*/
public function url();
/**
* @return string Dir path with trailing slash
*/
public function path();
}
การใช้งานที่เป็นรูปธรรมในปลั๊กอินของคุณอาจมีลักษณะเช่นนี้:
class PluginDirectoryAddress implements DirectoryAddress
{
private $path;
private $url;
public function __construct( $dirpath )
{
$this->url = plugins_url( '/', $dirpath );
$this->path = plugin_dir_path( $dirpath );
}
/**
* @return string Dir URL with trailing slash
*/
public function url() {
return $this->url;
}
/**
* @return string Dir path without trailing slash
*/
public function path() {
return $this->path;
}
}
ตอนนี้คุณสร้างอินสแตนซ์ของคลาสนั้นในไฟล์ปลั๊กอินหลักของคุณ:
$address = new PluginDirectoryAddress( __DIR__ );
และคลาสอื่น ๆ ทั้งหมดมีเพียงการพึ่งพาส่วนต่อประสานในตัวสร้างของพวกเขาเช่นนี้
public function __construct( DirectoryAddress $directory ) {}
พวกเขากำลังเข้าถึง URL และเส้นทางจากอินสแตนซ์ที่ส่งผ่านทันทีเท่านั้น
class.Plugin_Controller.php
จำเป็นต้องมีในไดเรคทอรีที่สูงขึ้นใช่ไหม?