我的插件使用以下代码引用文件,但我已经阅读了WP_PLUGIN_DIR
如果用户重命名默认插件文件夹,则无法工作。我还想替换/location-specific-menu-items/
引用当前插件文件夹。
$gi = geoip_open(WP_PLUGIN_DIR ."/location-specific-menu-items/GeoIP.dat", GEOIP_STANDARD);
我如何重写它,使其工作,而不考虑WP插件目录和特定插件文件夹的名称?
编辑:
下面是我根据大家的意见提出的最终工作解决方案。非常感谢!
$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;
}
最合适的回答,由SO网友:birgire 整理而成
如果插件结构为:
plugins/
some-plugin/
some-plugin.php
data/
GeoIP.dat
然后,对于PHP 5.3.0+,可以尝试使用magic常量
__DIR__
__DIR__
文件的目录。如果在include中使用,则返回包含文件的目录。这相当于dirname(__FILE__)
. 除非是根目录,否则此目录名后面没有斜杠。
在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 );
要获得更广泛的PHP支持,您可以使用
dirname( __FILE__ )
, 哪里
__FILE__
在PHP 4.0.2中添加。