Bạn nên làm cho tất cả các lớp học của bạn độc lập với vị trí thực tế của chúng, để bạn có thể di chuyển chúng dễ dàng và có thể tái sử dụng chúng trong các dự án khác.
Tôi sẽ tạo một lớp cho các lớp khác biết đường dẫn hoặc URL sẽ sử dụng, để nó thực hiện giao diện để bạn có thể sử dụng lại các lớp khác ngay cả trong một chủ đề hoặc hoàn toàn bên ngoài WordPress.
Ví dụ cho giao diện:
interface DirectoryAddress
{
/**
* @return string Dir URL with trailing slash
*/
public function url();
/**
* @return string Dir path with trailing slash
*/
public function path();
}
Việc triển khai cụ thể trong plugin của bạn có thể trông như thế này:
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;
}
}
Bây giờ bạn tạo một thể hiện của lớp đó trong tệp plugin chính của mình:
$address = new PluginDirectoryAddress( __DIR__ );
Và tất cả các lớp khác chỉ có một phụ thuộc vào giao diện trong hàm tạo của chúng, như thế này:
public function __construct( DirectoryAddress $directory ) {}
Họ đang truy cập URL và đường dẫn chỉ từ phiên bản được thông qua ngay bây giờ.
class.Plugin_Controller.php
sẽ cần phải được yêu cầu bởi các tập tin trong thư mục cao hơn, đúng không?