Vous devez rendre toutes vos classes indépendantes de leur emplacement réel, afin de pouvoir les déplacer facilement et peut-être les réutiliser dans d'autres projets.
Je créerais une classe qui dirait aux autres classes le chemin ou l'URL à utiliser, la laisser implémenter une interface afin que vous puissiez réutiliser les autres classes peut-être même dans un thème ou complètement en dehors de WordPress.
Exemple pour l'interface:
interface DirectoryAddress
{
/**
* @return string Dir URL with trailing slash
*/
public function url();
/**
* @return string Dir path with trailing slash
*/
public function path();
}
L'implémentation concrète de votre plugin pourrait ressembler à ceci:
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;
}
}
Maintenant, vous créez une instance de cette classe dans votre fichier de plugin principal:
$address = new PluginDirectoryAddress( __DIR__ );
Et toutes les autres classes ont juste une dépendance à l'interface dans leur constructeur, comme ceci:
public function __construct( DirectoryAddress $directory ) {}
Ils accèdent maintenant à l'URL et au chemin uniquement à partir de l'instance transmise.
class.Plugin_Controller.php
fichier devrait être requis par le fichier dans le répertoire supérieur, n'est-ce pas?