web-dev-qa-db-ja.com

プラグインディレクトリを参照するためのベストプラクティス

私のプラグインはファイルを参照するために次のコードを使用します、しかし私は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;              
}   
9
j8d

プラグイン構造が

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__ ) を使うことができます。

8
birgire

あなたが使用することができます:

plugin_dir_path(__FILE__);

とにかくただのラッパー関数です。

trailingslashit(dirname(__FILE__));    
5
majick

WordPressが搭載している機能を見ることもできます。 plugin_dir_path()plugins_url() または plugin_dir_url()

プラグインがサーバー上のどこに配置されているかを判断するのに役立ちます。これらの機能は、 プラグインの書き方:名前、ファイル、および場所のCodexでも推奨されています。

それに加えて、あなたは明らかにPHPからのマジック定数を使用して、あなたのファイルがどこにあるかを決定するためにそれらの出力をフィルタリングすることができます。

2
flomei