প্লাগইন ডিরেক্টরি রেফারেন্সিংয়ের জন্য সেরা অনুশীলন


9

আমার প্লাগইন কোনও ফাইলের উল্লেখের জন্য নিম্নলিখিত কোডগুলি ব্যবহার করে, তবে আমি পড়েছি WP_PLUGIN_DIRযদি কোনও ব্যবহারকারী ডিফল্ট প্লাগইন ফোল্ডারটির নাম পরিবর্তন করে। আমি /location-specific-menu-items/বর্তমান প্লাগইন ফোল্ডারের রেফারেন্স সহ প্রতিস্থাপন করতে চাই ।

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

ডাব্লুপি প্লাগইন ডিরেক্টরি এবং নির্দিষ্ট প্লাগইন ফোল্ডারের নাম নির্বিশেষে এটিকে কাজ করতে আমি কীভাবে এটি পুনরায় লিখতে পারি?

সম্পাদনা করুন:

এখানে প্রত্যেকের ইনপুট অনুসরণ করে আমার চূড়ান্ত কাজের সমাধান। অনেক ধন্যবাদ!

$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_URL বা WP_PLUGIN_DIR ব্যবহার করবেন না - প্লাগইনগুলি প্লাগইন ডিরেক্টরিতে নাও থাকতে পারে।"
j8d

উত্তর:


8

যদি প্লাগইন কাঠামোটি হয়:

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

তারপরে পিএইচপি 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 );

বিস্তৃত পিএইচপি সহায়তার জন্য আপনি ব্যবহার করতে পারেন dirname( __FILE__ ), যেখানে __FILE__পিএইচপি 4.0.০.২ এ যুক্ত হয়েছিল।


1
PS: নোট করুন যে আপনি যদি plugin_dir_path( __FILE__ )এটি ব্যবহার করেন তবে এটির জন্য একটি মোড়ক trailingslashit( dirname( __FILE__ ) )এটির নামটিতে একটি ট্রেলিং স্ল্যাশ যুক্ত করে।
বার্জায়ার

ওহহ শীতল যে আমি সবেমাত্র পোস্ট করেছি শব্দের জন্য প্রায় হুবহু লোল
মজিক

হেই আমি আপনাকে এর মধ্যেই পরাজিত করেছি, তবে এটি ঘটতে পারে, যাইহোক +1 ;-)
বার্গিরে

তাই $file = plugin_dir_path( __FILE__ ) . 'data/GeoIP.dat';কাজ ভাল ছিল হবে?
j8d

1
হ্যাঁ যে @ j8d কাজ করা উচিত
birgire

5

তুমি ব্যবহার করতে পার:

plugin_dir_path(__FILE__);

এটি যাইহোক কেবল একটি মোড়কের কাজ হিসাবে:

trailingslashit(dirname(__FILE__));    

2

ওয়ার্ডপ্রেস এর জন্য এই কার্যাদিগুলি কী কী রয়েছে সেগুলিও একবার দেখতে পারেন: যেমন plugin_dir_path(), plugins_url()বাplugin_dir_url()

আপনার প্লাগইনটি সার্ভারে কোথায় স্থাপন করা হয়েছে তা নির্ধারণে তারা আপনাকে সহায়তা করবে। এই ফাংশনগুলি একটি প্লাগইন লেখার ক্ষেত্রে কোডেক্স দ্বারাও প্রস্তাবিত : নাম, ফাইল এবং অবস্থান Loc

এর বাইরে আপনি পিএইচপি থেকে ম্যাজিক ধ্রুবকগুলি অবশ্যই ব্যবহার করতে পারেন এবং আপনার ফাইলগুলি কোথায় তা নির্ধারণ করার জন্য তাদের আউটপুট ফিল্টার করতে পারে।


আমি ব্যবহার করতে সমস্যা দেখতে পাচ্ছি না plugin_dir_url(), এটি আপনার পাস করা ফাইলটির ফোল্ডারটি ফিরিয়ে দেয়, হ্যাঁ। এটাই তার দরকার।
ফ্লোমি

1
plugin_dir_pathডিরেক্টরিটি ফিরিয়ে দেয়, plugin_dir_urlআপনাকে ফাইলে ইউআরএল দেবে, যা কেবল একই জিনিস নয় এবং তার কী প্রয়োজন তা নয়। এটি অন্যান্য জিনিসের জন্য যেমন - ইমেজ উত্স বা স্টাইলশিটগুলি সজ্জিত করার জন্য দরকারী।
মজিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.