it-swarm.com.de

Best Practice zum Referenzieren des Plugin-Verzeichnisses

Mein Plugin verwendet den folgenden Code, um auf eine Datei zu verweisen, aber ich habe gelesen, dass WP_PLUGIN_DIR nicht funktioniert, wenn ein Benutzer den Standard-Plugin-Ordner umbenennt. Ich möchte auch /location-specific-menu-items/ durch einen Verweis auf den aktuellen Plugin-Ordner ersetzen.

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

Wie könnte ich das umschreiben, damit es funktioniert, unabhängig von den Namen des WP Plugin-Verzeichnisses und des spezifischen Plugin-Ordners?

BEARBEITEN:

Hier ist meine endgültige Arbeitslösung, die den Eingaben aller folgt. Danke vielmals!

$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

Wenn die Plugin-Struktur ist:

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

dann können Sie für PHP 5.3.0+ die magische Konstante __DIR__ ausprobieren.

__DIR__ Das Verzeichnis der Datei. Bei Verwendung in einem Include wird das Verzeichnis der enthaltenen Datei zurückgegeben. Dies entspricht dirname(__FILE__). Dieser Verzeichnisname hat keinen abschließenden Schrägstrich, es sei denn, es ist das Stammverzeichnis.

in der some-plugin.php Datei:

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

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

Für eine breitere PHP Unterstützung können Sie dirname( __FILE__ ) verwenden, wobei __FILE__ in PHP 4.0.2 hinzugefügt wurde.

8
birgire

Sie können verwenden:

plugin_dir_path(__FILE__);

Was sowieso nur eine Wrapper-Funktion ist für:

trailingslashit(dirname(__FILE__));    
5
majick

Sie könnten auch einen Blick auf die Funktionen werfen, die WordPress dafür an Bord hat: z. plugin_dir_path() , plugins_url() oder plugin_dir_url()

Sie helfen Ihnen bei der Bestimmung, wo sich Ihr Plugin auf dem Server befindet. Diese Funktionen werden auch vom Codex in Schreiben eines Plugins empfohlen: Namen, Dateien und Speicherorte.

Außerdem können Sie natürlich magische Konstanten aus PHP verwenden und deren Ausgabe filtern, um festzustellen, wo sich Ihre Dateien befinden.

2
flomei