Вы должны сделать все свои классы независимыми от их фактического местоположения, чтобы вы могли легко перемещать их и, возможно, использовать их в других проектах.
Я хотел бы создать класс, который сообщает другим классам, какой путь или URL использовать, пусть он реализует интерфейс, чтобы вы могли повторно использовать другие классы, возможно, даже в теме или полностью вне WordPress.
Пример для интерфейса:
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
файл потребуется в верхнем каталоге, правильно?