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.