Mi complemento utiliza el siguiente código para hacer referencia a un archivo, pero he leído WP_PLUGIN_DIR
que no funcionará si un usuario cambia el nombre de la carpeta predeterminada del complemento. También me gustaría reemplazar /location-specific-menu-items/
con una referencia a la carpeta del complemento actual.
$gi = geoip_open(WP_PLUGIN_DIR ."/location-specific-menu-items/GeoIP.dat", GEOIP_STANDARD);
¿Cómo podría reescribir esto para que funcione independientemente de los nombres del directorio de complementos de WP y la carpeta de complementos específica?
EDITAR:
Aquí está mi solución de trabajo final siguiendo los comentarios de todos. ¡Muchas gracias!
$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;
}
Respuestas:
Si la estructura del complemento es:
entonces para PHP 5.3.0+, puedes probar la constante mágica
__DIR__
dentro del
some-plugin.php
archivo:Para un soporte PHP más amplio que podría usar
dirname( __FILE__ )
, donde__FILE__
se agregó en PHP 4.0.2.fuente
plugin_dir_path( __FILE__ )
, entonces es un contenedor paratrailingslashit( dirname( __FILE__ ) )
eso agrega una barra diagonal al nombre del directorio.$file = plugin_dir_path( __FILE__ ) . 'data/GeoIP.dat';
funcionaría bien?Puedes usar:
Que como es solo una función de contenedor de todos modos para:
fuente
También puede echar un vistazo a las funciones que WordPress tiene a bordo para esto: por ejemplo
plugin_dir_path()
,plugins_url()
oplugin_dir_url()
Le ayudarán a determinar dónde se coloca su complemento en el servidor. Esas funciones también son recomendadas por el Codex al escribir un complemento: nombres, archivos y ubicaciones.
Además de eso, obviamente puedes usar constantes mágicas de PHP y filtrar su salida para determinar dónde están tus archivos.
fuente
plugin_dir_url()
, devuelve la carpeta del archivo que pasaste, sí. Eso es lo que necesita.plugin_dir_path
devuelve el directorio,plugin_dir_url
le dará la URL del archivo, que simplemente no es lo mismo y NO lo que necesita. es útil para otras cosas, como fuentes de imágenes o hojas de estilo en cola.