प्लगइन निर्देशिका को संदर्भित करने के लिए सबसे अच्छा अभ्यास


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 को फिर से परिभाषित करना सुनिश्चित करना होगा ...
मैजिक

आह, मुझे याद आ रहा है। समस्या यह है कि प्लगइन्स हमेशा डिफ़ॉल्ट प्लग इन निर्देशिका में नहीं रहते हैं। यहाँ वह उद्धरण है जो मैंने पढ़ा है: "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
ps: ध्यान दें कि यदि आप उपयोग करते हैं plugin_dir_path( __FILE__ ), तो यह उसके लिए एक आवरण है trailingslashit( dirname( __FILE__ ) )जो dirname के पीछे एक अनुगामी स्लैश जोड़ता है।
बीरगीर

woah cool जो कि शब्द के लिए लगभग ठीक वैसा ही शब्द है जैसा मैंने अभी पोस्ट किया है, lol
majick

हे, मैं अभी आपको इसे हराता हूं, लेकिन यह कुछ भी हो सकता है, वैसे भी +1 ;-)
बिरगाइर

तो $file = plugin_dir_path( __FILE__ ) . 'data/GeoIP.dat';काम अच्छा होता?
j8d

1
हाँ जो @ 13 पर @ j8d
birgire

5

आप उपयोग कर सकते हैं:

plugin_dir_path(__FILE__);

जो के लिए वैसे भी सिर्फ एक आवरण समारोह है:

trailingslashit(dirname(__FILE__));    

2

वर्डप्रेस ने इसके लिए जो कार्य किए हैं उन पर भी आपकी नज़र हो सकती है: जैसे plugin_dir_path(), plugins_url()याplugin_dir_url()

वे यह निर्धारित करने में आपकी सहायता करेंगे कि आपका प्लगइन सर्वर पर कहां रखा गया है। कोडेक्स द्वारा प्लगिन लिखने में उन कार्यों की भी सिफारिश की जाती है : नाम, फाइलें और स्थान।

इसके अलावा आप स्पष्ट रूप से PHP से जादू स्थिरांक का उपयोग कर सकते हैं और अपने आउटपुट को फ़िल्टर करके यह निर्धारित कर सकते हैं कि आपकी फाइलें कहां हैं।


मुझे उपयोग करने में कोई समस्या नहीं है plugin_dir_url(), यह आपके द्वारा पास की गई फ़ाइल के लिए फ़ोल्डर लौटाता है, हाँ। वह जो वह चाहता है।
फ़्लोमि

1
plugin_dir_pathनिर्देशिका को लौटाता है, plugin_dir_urlआपको फ़ाइल को URL देगा, जो कि बस एक ही चीज़ नहीं है और न ही उसे क्या चाहिए। यह अन्य चीजों के लिए उपयोगी है - जैसे छवि स्रोत या हालांकि स्टाइलशीट।
मैजिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.