Thực hành tốt nhất để tham khảo thư mục Plugin


9

Plugin của tôi sử dụng mã sau đây để tham chiếu một tệp, nhưng tôi đã đọc WP_PLUGIN_DIRsẽ không hoạt động nếu người dùng đổi tên thư mục plugin mặc định. Tôi cũng muốn thay thế /location-specific-menu-items/bằng một tham chiếu đến thư mục plugin hiện tại.

$gi = geoip_open(WP_PLUGIN_DIR ."/location-specific-menu-items/GeoIP.dat", GEOIP_STANDARD);

Làm thế nào tôi có thể viết lại cái này để làm cho nó hoạt động bất kể tên của thư mục plugin WP và thư mục plugin cụ thể?

BIÊN TẬP:

Đây là giải pháp làm việc cuối cùng của tôi theo đầu vào của mọi người. Cảm ơn nhiều!

$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;              
}   

bạn đọc những thứ đó ở đâu..? nếu người dùng đổi tên thư mục plugin, tôi nghĩ họ cũng phải chắc chắn xác định lại WP_PLUGIN_DIR ...
Majick

À, tôi sai rồi. Vấn đề là các plugin không luôn sống trong thư mục plugin mặc định. Đây là câu trích dẫn tôi đọc: "Đừng sử dụng WP_PLUGIN_URL hoặc WP_PLUGIN_DIR - các plugin có thể không có trong thư mục plugin."
j8d

Câu trả lời:


8

Nếu cấu trúc plugin là:

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

sau đó với PHP 5.3.0+, bạn có thể thử hằng số ma thuật __DIR__

__DIR__Thư mục của tập tin. Nếu được sử dụng bên trong bao gồm, thư mục của tệp được bao gồm sẽ được trả về. Điều này tương đương với dirname(__FILE__). Tên thư mục này không có dấu gạch chéo trừ khi nó là thư mục gốc.

trong some-plugin.phptập tin:

// Full path of the GeoIP.dat file
$file =  __DIR__ . '/data/GeoIP.dat';

// Open datafile
if( is_readable ( $file ) ) 
    $gi = geoip_open( $file, GEOIP_STANDARD );

Để hỗ trợ PHP rộng hơn, bạn có thể sử dụng dirname( __FILE__ ), nơi __FILE__đã được thêm vào trong PHP 4.0.2.


1
ps: lưu ý rằng nếu bạn sử dụng plugin_dir_path( __FILE__ ), thì đó là một trình bao bọc để trailingslashit( dirname( __FILE__ ) )thêm dấu gạch chéo vào dirname.
bạch dương

woah cool đó là gần như chính xác từng từ những gì tôi vừa đăng, lol
majick

hehe tôi vừa đánh bại bạn, nhưng điều này có thể xảy ra, dù sao +1 ;-)
birgire

Vì vậy, $file = plugin_dir_path( __FILE__ ) . 'data/GeoIP.dat';làm việc sẽ được tốt?
j8d

1
vâng, nó sẽ hoạt động @ j8d
birgire 12/2/2016

5

Bạn có thể dùng:

plugin_dir_path(__FILE__);

Mà chỉ là một chức năng bao bọc cho:

trailingslashit(dirname(__FILE__));    

2

Bạn cũng có thể có một cái nhìn tại các chức năng WordPress có trên tàu cho việc này: ví dụ plugin_dir_path(), plugins_url()hoặcplugin_dir_url()

Họ sẽ giúp bạn xác định nơi plugin của bạn được đặt trên máy chủ. Các chức năng này cũng được Codex khuyến nghị khi viết Plugin: Tên, tệp và vị trí.

Bên cạnh đó, rõ ràng bạn có thể sử dụng các hằng số ma thuật từ PHP và lọc đầu ra của chúng để xác định vị trí các tệp của bạn.


Tôi không thấy vấn đề gì với việc sử dụng plugin_dir_url(), nó trả về thư mục cho tập tin bạn đã chuyển, yeah. Đó là những gì anh ấy cần.
flomei

1
plugin_dir_pathtrả về thư mục, plugin_dir_urlsẽ cung cấp cho bạn URL vào tệp, đơn giản là không giống nhau và KHÔNG phải những gì anh ta cần. nó rất hữu ích cho những thứ khác - như nguồn hình ảnh hoặc bảng định kiểu enqueueing.
Majick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.