Em um subdiretório dentro do seu diretório de plugins, você pode usar o seguinte código:
$this->plugin_location = plugin_dir_url(dirname(__FILE__));
Eu escrevi vários plugins usando a estrutura:
/plugins/myplugin/myplugin.php /plugins/myplugin/class/class-myclass.php
Para aproveitar o OO e estruturar todo o meu código
Dentro do arquivo de classe, há momentos em que preciso obter o URL do plug-in básico ... Estou usando o seguinte, mas tenho certeza de que há uma maneira melhor:
$this->plugin_location = substr(plugin_dir_url(__FILE__),0, strrpos(plugin_dir_url(__FILE__), "/",-2)) . "/";
Outra ideia com a qual eu brincava era ter uma classe singleton adicional que armazenasse todas as configurações do plug-in e adicionasse uma camada de abstração por meio dos arquivos de classe.
Qualquer ajuda é muito apreciada.
Em um subdiretório dentro do seu diretório de plugins, você pode usar o seguinte código:
$this->plugin_location = plugin_dir_url(dirname(__FILE__));
Você deve tornar todas as suas turmas independentes de sua localização real, para que você possa movê-las facilmente e reutilizá-las em outros projetos.
Eu criaria uma classe que informa às outras classes qual caminho ou URL usar, deixe-a implementar uma interface para que você possa reutilizar as outras classes, talvez até mesmo em um tema ou completamente fora do WordPress.
Exemplo para a interface:
interface DirectoryAddress
{
/**
* @return string Dir URL with trailing slash
*/
public function url();
/**
* @return string Dir path with trailing slash
*/
public function path();
}
A implementação concreta no seu plug-in pode ser assim:
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;
}
}
Agora crie uma instância dessa classe no seu arquivo de plug-in principal:
$address = new PluginDirectoryAddress( __DIR__ );
E todas as outras classes têm apenas uma dependência na interface em seu construtor, assim:
public function __construct( DirectoryAddress $directory ) {}
Eles estão acessando a URL e o caminho somente a partir da instância passada agora.
Tags plugins plugin-development oop