Mejores prácticas para hacer referencia al directorio de complementos

9

Mi complemento usa el siguiente código para hacer referencia a un archivo, pero he leído que WP_PLUGIN_DIR no funcionará si un usuario cambia el nombre de la carpeta del complemento predeterminado. 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 del complemento WP y la carpeta del complemento específico?

EDITAR:

Aquí está mi solución de trabajo final siguiendo la opinión 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;              
}   
    
pregunta j8d 12.02.2016 - 08:35

3 respuestas

8

Si la estructura del complemento es:

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

luego para PHP 5.3.0+, puedes probar la constante mágica __DIR__

  

__DIR__ El directorio del archivo. Si se utiliza dentro de una inclusión, se devuelve el directorio del archivo incluido. Esto es equivalente a   %código%. Este nombre de directorio no tiene una barra inclinada   a menos que sea el directorio raíz.

dentro del archivo 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 una mayor compatibilidad con PHP, puede usar some-plugin.php , donde se agregó dirname( __FILE__ ) en PHP 4.0.2.

    
respondido por el birgire 12.02.2016 - 11:53
5

Puedes usar:

plugin_dir_path(__FILE__);

Que como es solo una función de envoltura de todos modos para:

trailingslashit(dirname(__FILE__));    
    
respondido por el majick 12.02.2016 - 12:49
2

También puede echar un vistazo a las funciones que WordPress tiene a bordo para esto: por ejemplo, plugin_dir_path() , plugins_url() o plugin_dir_url()

Le ayudarán a determinar dónde se colocará su complemento en el servidor. El Codex también recomienda esas funciones en Escribiendo un complemento: nombres, archivos y ubicaciones.

Además, obviamente puedes usar constantes mágicas de PHP y filtrar su salida para determinar dónde están tus archivos.

    
respondido por el flomei 12.02.2016 - 12:29

Lea otras preguntas en las etiquetas