Anda harus membuat semua kelas Anda independen dari lokasi mereka yang sebenarnya, sehingga Anda dapat memindahkannya dengan mudah dan mungkin menggunakannya kembali di proyek lain.
Saya akan membuat kelas yang memberi tahu kelas lain apa jalur atau URL yang akan digunakan, biarkan ia mengimplementasikan antarmuka sehingga Anda dapat menggunakan kembali kelas-kelas lain bahkan mungkin dalam suatu tema atau sepenuhnya di luar WordPress.
Contoh untuk antarmuka:
interface DirectoryAddress
{
/**
* @return string Dir URL with trailing slash
*/
public function url();
/**
* @return string Dir path with trailing slash
*/
public function path();
}
Implementasi konkret di plugin Anda bisa terlihat seperti ini:
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;
}
}
Sekarang Anda membuat instance kelas itu di file plugin utama Anda:
$address = new PluginDirectoryAddress( __DIR__ );
Dan semua kelas lain hanya memiliki ketergantungan pada antarmuka di konstruktor mereka, seperti ini:
public function __construct( DirectoryAddress $directory ) {}
Mereka mengakses URL dan path hanya dari instance yang diteruskan sekarang.
class.Plugin_Controller.php
akan perlu diminta oleh file di direktori yang lebih tinggi, benar?