web-dev-qa-db-fra.com

Meilleure pratique pour référencer le répertoire des plugins

Mon plugin utilise le code suivant pour référencer un fichier, mais j'ai lu WP_PLUGIN_DIR ne fonctionnera pas si un utilisateur renomme le dossier du plugin par défaut. Je voudrais aussi remplacer /location-specific-menu-items/ par une référence au dossier du plugin actuel.

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

Comment pourrais-je réécrire ceci pour le faire fonctionner quels que soient les noms du répertoire de plug-in WP et du dossier de plug-in spécifique?

MODIFIER:

Voici ma solution de travail finale suite aux commentaires de chacun. Merci beaucoup!

$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;              
}   
9
j8d

Si la structure du plugin est:

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

alors pour PHP 5.3.0+, vous pourriez essayer la constante magique __DIR__

__DIR__ Le répertoire du fichier. S'il est utilisé dans une inclusion, le répertoire du fichier inclus est renvoyé. Ceci équivaut à dirname(__FILE__). Ce nom de répertoire ne comporte pas de barre oblique, sauf s'il s'agit du répertoire racine.

dans le fichier some-plugin.php:

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

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

Pour un support plus étendu de PHP, vous pouvez utiliser dirname( __FILE__ ) , où __FILE__ a été ajouté dans PHP 4.0.2.

8
birgire

Vous pouvez utiliser:

plugin_dir_path(__FILE__);

Qui as as de toute façon une fonction wrapper pour:

trailingslashit(dirname(__FILE__));    
5
majick

Vous pouvez également consulter les fonctions intégrées à WordPress: par exemple. plugin_dir_path() , plugins_url() ou plugin_dir_url()

Ils vous aideront à déterminer où votre plugin est placé sur le serveur. Ces fonctions sont également recommandées par le Codex dans Rédaction d’un plug-in: noms, fichiers et emplacements.

De plus, vous pouvez évidemment utiliser les constantes magiques de PHP et filtrer leur sortie pour déterminer l'emplacement de vos fichiers.

2
flomei