플러그인 디렉토리 참조를위한 모범 사례


9

플러그인은 다음 코드를 사용하여 파일을 참조하지만 읽었습니다. 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;              
}   

어디서 읽었습니까? 사용자가 플러그인 폴더의 이름을 바꾸면 WP_PLUGIN_DIR도 다시 정의해야한다고 생각합니다 ...
majick

아 맞다. 문제는 플러그인이 항상 기본 플러그인 디렉토리에 있지는 않다는 것입니다. 다음은 제가 인용 한 내용입니다. "WP_PLUGIN_URL 또는 WP_PLUGIN_DIR을 사용하지 마십시오. 플러그인이 플러그인 디렉토리에 없을 수 있습니다."
j8d

답변:


8

플러그인 구조가 다음과 같은 경우 :

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 지원을 위해 dirname( __FILE__ ), __FILE__PHP 4.0.2에서 추가되었다.


1
추신 :을 사용 하면 dirname에 슬래시를 추가하는 plugin_dir_path( __FILE__ )래퍼입니다 trailingslashit( dirname( __FILE__ ) ).
birgire

woah cool 그게 내가 방금 게시 한 단어에 대한 거의 정확하게 단어입니다. lol
majick

hehe 난 그냥 당신을 이길, 그러나 어쨌든 일어날 수 있습니다 +1 ;-)
birgire

그래서 $file = plugin_dir_path( __FILE__ ) . 'data/GeoIP.dat';일이 잘 되었습니까?
j8d

1
네 @ j8d 작동합니다
birgire

5

당신이 사용할 수있는:

plugin_dir_path(__FILE__);

어쨌든 래퍼 함수는 다음과 같습니다.

trailingslashit(dirname(__FILE__));    

2

또한 워드 프레스는이를 위해 보드에이 기능을 살펴 수 : 예를 plugin_dir_path(), plugins_url()또는plugin_dir_url()

플러그인이 서버에서 어디에 위치하는지 결정하는 데 도움이됩니다. 이러한 기능은 코덱스에서 플러그인 작성 : 이름, 파일 및 위치 에서도 권장합니다 .

게다가 PHP에서 마술 상수를 사용하고 출력을 필터링하여 파일 위치를 결정할 수 있습니다.


를 사용하는 데 문제가 발생하지 않습니다 plugin_dir_url(). 전달한 파일의 폴더를 반환합니다. 그것이 그가 필요로하는 것입니다.
flomei

1
plugin_dir_path디렉토리를 반환하고 plugin_dir_url파일에 대한 URL을 제공합니다. 파일은 단순히 동일하지 않으며 필요한 것이 아닙니다. 그래도 이미지 소스 나 대기열 스타일 시트와 같은 다른 것들에 유용합니다.
majick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.