Powinieneś uniezależnić wszystkie swoje klasy od ich rzeczywistej lokalizacji, abyś mógł je łatwo przenosić i być może ponownie wykorzystać w innych projektach.
Stworzyłbym klasę, która mówi innym klasom, jakiej ścieżki lub adresu URL użyć, pozwól mu zaimplementować interfejs, abyś mógł ponownie użyć innych klas, może nawet w motywie lub całkowicie poza WordPress.
Przykład interfejsu:
interface DirectoryAddress
{
/**
* @return string Dir URL with trailing slash
*/
public function url();
/**
* @return string Dir path with trailing slash
*/
public function path();
}
Konkretna implementacja wtyczki może wyglądać następująco:
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;
}
}
Teraz tworzysz instancję tej klasy w głównym pliku wtyczki:
$address = new PluginDirectoryAddress( __DIR__ );
Wszystkie pozostałe klasy mają po prostu zależność od interfejsu w swoim konstruktorze, na przykład:
public function __construct( DirectoryAddress $directory ) {}
Teraz uzyskują dostęp do adresu URL i ścieżki tylko z przekazanej instancji.
class.Plugin_Controller.php
razie plik w wyższym katalogu musiałby być wymagany, prawda?