私のプラグインはファイルを参照するために次のコードを使用します、しかし私はWP_PLUGIN_DIR
がユーザーがデフォルトのプラグインフォルダーを改名するなら働かないと読んだ。 /location-specific-menu-items/
を現在のプラグインフォルダへの参照に置き換えたいと思います。
$gi = geoip_open(WP_PLUGIN_DIR ."/location-specific-menu-items/GeoIP.dat", GEOIP_STANDARD);
WP pluginディレクトリと特定のプラグインフォルダの名前に関係なく動作させるためにこれをどのように書き換えることができますか?
編集:
これが、皆さんの意見を踏まえた私の最終的な解決策です。どうもありがとう!
$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;
}
プラグイン構造が
plugins/
some-plugin/
some-plugin.php
data/
GeoIP.dat
それからPHP 5.3.0+のために、あなたは魔法の定数を試すことができます __DIR__
__DIR__
ファイルのディレクトリ。インクルード内で使用されている場合は、インクルードファイルのディレクトリが返されます。これは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サポートのためにあなたは__FILE__
がPHP 4.0.2で追加された dirname( __FILE__ )
を使うことができます。
あなたが使用することができます:
plugin_dir_path(__FILE__);
とにかくただのラッパー関数です。
trailingslashit(dirname(__FILE__));
WordPressが搭載している機能を見ることもできます。 plugin_dir_path()
、 plugins_url()
または plugin_dir_url()
プラグインがサーバー上のどこに配置されているかを判断するのに役立ちます。これらの機能は、 プラグインの書き方:名前、ファイル、および場所のCodexでも推奨されています。
それに加えて、あなたは明らかにPHPからのマジック定数を使用して、あなたのファイルがどこにあるかを決定するためにそれらの出力をフィルタリングすることができます。