Prática recomendada para referência ao diretório de plug-ins

9

Meu plugin usa o seguinte código para fazer referência a um arquivo, mas eu li que WP_PLUGIN_DIR não funcionará se um usuário renomeia a pasta do plugin padrão. Eu também gostaria de substituir /location-specific-menu-items/ por uma referência à pasta de plugins atual.

$gi = geoip_open(WP_PLUGIN_DIR ."/location-specific-menu-items/GeoIP.dat", GEOIP_STANDARD);

Como eu poderia reescrever isso para que funcionasse independentemente dos nomes do diretório do plugin WP e da pasta específica do plugin?

EDITAR:

Aqui está minha solução final de trabalho seguindo a contribuição de todos. Muito obrigado!

$GeoIPv4_file = plugin_dir_path( __FILE__ ) . 'data/GeoIPv4.dat';
$GeoIPv6_file = plugin_dir_path( __FILE__ ) . 'data/GeoIPv6.dat';

if (!filter_var($ip_address, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === FALSE) {     
    if ( is_readable ( $GeoIPv4_file ) ) { 
        $gi = geoip_open( $GeoIPv4_file, GEOIP_STANDARD );
        $user_country = geoip_country_code_by_addr($gi, $ip_address);
        geoip_close($gi);
    }
} elseif (!filter_var($ip_address, FILTER_VALIDATE_IP,FILTER_FLAG_IPV6) === FALSE) {
    if ( is_readable ( $GeoIPv6_file ) ) {
        $gi = geoip_open( $GeoIPv6_file, GEOIP_STANDARD );
        $user_country = geoip_country_code_by_addr($gi, $ip_address);
        geoip_close($gi);
    }
} else {
    $user_country = "Can't locate IP: " . $ip_address;              
}   
    
por j8d 12.02.2016 / 08:35

3 respostas

8

Se a estrutura do plug-in é:

plugins/
   some-plugin/
       some-plugin.php
       data/
           GeoIP.dat

então para o PHP 5.3.0+, você pode tentar a constante mágica __DIR__

  

__DIR__ O diretório do arquivo. Se usado dentro de um include, o diretório do arquivo incluído é retornado. Isso é equivalente a   %código%. Este nome de diretório não possui uma barra final   a menos que seja o diretório raiz.

dentro do arquivo dirname(__FILE__) :

// Full path of the GeoIP.dat file
$file =  __DIR__ . '/data/GeoIP.dat';

// Open datafile
if( is_readable ( $file ) ) 
    $gi = geoip_open( $file, GEOIP_STANDARD );

Para suporte mais amplo ao PHP, você pode usar some-plugin.php , onde dirname( __FILE__ ) foi adicionado no PHP 4.0.2.

    
por birgire 12.02.2016 / 11:53
5

Você pode usar:

plugin_dir_path(__FILE__);

Qual é apenas uma função de wrapper para:

trailingslashit(dirname(__FILE__));    
    
por majick 12.02.2016 / 12:49
2

Você também pode ver as funções que o WordPress tem a bordo para isso: por exemplo, plugin_dir_path() , plugins_url() ou plugin_dir_url()

Eles ajudarão você a determinar onde seu plug-in é colocado no servidor. Essas funções também são recomendadas pelo Codex em Como escrever um plugin: nomes, arquivos e locais.

Além disso, você pode obviamente usar constantes mágicas do PHP e filtrar sua saída para determinar onde seus arquivos estão.

    
por flomei 12.02.2016 / 12:29