Eklenti Dizini'ne Başvurmak İçin En İyi Uygulama


9

Eklentim bir dosyaya başvurmak için aşağıdaki kodu kullanır, ancak WP_PLUGIN_DIRbir kullanıcı varsayılan eklenti klasörünü yeniden adlandırırsa çalışmaz. Ayrıca /location-specific-menu-items/geçerli eklenti klasörüne bir başvuru ile değiştirmek istiyorum .

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

WP eklenti dizininin ve belirli eklenti klasörünün adlarından bağımsız olarak çalışmasını sağlamak için bunu nasıl yeniden yazabilirim?

DÜZENLE:

İşte herkesin girdisini takip eden son çalışma çözümüm. Çok teşekkürler!

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

bunu nereden okudun ..? kullanıcı eklenti klasörünü yeniden adlandırırsa, onlar da WP_PLUGIN_DIR yeniden tanımlamak için emin olmak gerektiğini düşünüyorum ...
majick

Ah, yanlış yazdım. Sorun, eklentilerin her zaman varsayılan eklenti dizininde yaşamamasıdır. İşte okuduğum alıntı: "WP_PLUGIN_URL veya WP_PLUGIN_DIR kullanmayın - eklentiler eklenti dizininde olmayabilir."
j8d

Yanıtlar:


8

Eklenti yapısı şuysa:

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

PHP 5.3.0+ için, sihirli sabiti deneyebilirsiniz __DIR__

__DIR__Dosyanın dizini. Bir içerme içinde kullanılırsa, eklenen dosyanın dizini döndürülür. Bu eşdeğerdir dirname(__FILE__). Bu dizin adında, kök dizin olmadığı sürece bir eğik çizgi yoktur.

some-plugin.phpdosya içinde :

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

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

Eğer kullanabilirsiniz geniş PHP desteği için dirname( __FILE__ ), __FILE__PHP 4.0.2 eklenmiştir.


1
ps: kullanırsanız plugin_dir_path( __FILE__ ), bunun için bir sarıcı olduğunu unutmayın trailingslashit( dirname( __FILE__ ) ).
birgire

woah serin bu neredeyse tam olarak ne ben sadece ne gönderdi kelime, lol
majick

hehe Ben sadece onu dövdü, ama bu yine de olabilir, +1 ;-)
birgire

Peki $file = plugin_dir_path( __FILE__ ) . 'data/GeoIP.dat';iş iyi olurdu?
j8d

1
evet bu çalışması gerekir @ j8d
birgire

5

Kullanabilirsiniz:

plugin_dir_path(__FILE__);

Zaten sadece bir sarıcı işlevi olduğu için:

trailingslashit(dirname(__FILE__));    

2

WordPress'in bunun için sahip olduğu işlevlere de göz atabilirsiniz: örneğin plugin_dir_path(), plugins_url()veyaplugin_dir_url()

Eklentinizin sunucuya nerede yerleştirileceğini belirlemenize yardımcı olurlar. Bu işlevler Eklenti Yazma'daki Kodeks tarafından da önerilir : Adlar, Dosyalar ve Konumlar.

Bunun yanı sıra, PHP'nin sihirli sabitlerini kullanabilir ve dosyalarınızın nerede olduğunu belirlemek için çıktılarını filtreleyebilirsiniz.


Kullanmayla ilgili bir sorun görmüyorum plugin_dir_url(), geçtiğiniz dosyanın klasörünü döndürüyor, evet. İhtiyacı olan bu.
flomei

1
plugin_dir_pathdizini döndürür, plugin_dir_urldosyanın URL'sini verir, bu da aynı şey değildir ve ihtiyacı olanı DEĞİLDİR. yine de görüntü kaynakları veya enqueueing stylesheets gibi diğer şeyler için kullanışlıdır.
majick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.