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;
}
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.
Vous pouvez utiliser:
plugin_dir_path(__FILE__);
Qui as as de toute façon une fonction wrapper pour:
trailingslashit(dirname(__FILE__));
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.