मैं प्लगइन्स स्लग कैसे पा सकता हूं?


11

मैं सोच रहा हूं कि मुझे प्लगइन अपडेट करने के लिए और वर्तमान में कौन से प्लग इन सक्रिय हैं यह निर्धारित करने के लिए मैं प्लगइन्स का स्लग (स्लग = आंतरिक नाम) कैसे पा सकता हूं? यह आमतौर पर प्लगइन का फ़ोल्डर नाम होता है, लेकिन अगर किसी प्लगइन में फ़ोल्डर नहीं है, तो यह इसका फ़ाइल नाम है (जैसे hello.php)। क्या कोई अन्य अपवाद हैं?

  1. लोअरकेस और अपरकेस अक्षर मायने रखते हैं?
  2. क्या एक प्लगइन अपने फ़ोल्डर नाम से अलग स्लग हो सकता है? क्या होगा अगर वहाँ एक प्लगइन है जिसका नाम है hello.php और दूसरा /hello.php/hello.php?

बहुत अच्छा सवाल, अफ़सोस कि हम क्यू को इनाम नहीं दे सकते, लेकिन मुझे लगता है कि ए पुरस्कार है;)
ब्रासोफिलो

जवाबों:


8

प्लगइन की पहचान करने के लिए वर्डप्रेस में प्रयुक्त स्ट्रिंग है:

plugin_basename($file);

... जहां प्लगइन हेडर के साथ$file एक फ़ाइल है

इसलिए यदि आप अपने प्लगइन में हैं, तो स्लग प्राप्त करें:

$slug = plugin_basename( __FILE__ );

1
plugin_basename ($ फ़ाइल); 3.8.1 के बाद से स्लग नहीं है। यह फ़ोल्डर / plugin_main_file.php पथ है। प्लगिन के "स्लग" के रूप में अकिस्मेट "अकीस्मेट / अक्मीसेट.फपी" नहीं है, लेकिन यह "अकीस्मेट" है।
जेफ मैटसन

3
यह अब किसी भी मामले में सही जवाब नहीं है।
माजिक

@ माजिक सच है, वर्डप्रेस 4.7.4 के लिए यह जवाब नहीं है
मर्करी

2
प्लगिन स्लग जनरेट करने का एक और तरीका है उपयोग करना dirname(plugin_basename(__FILE__))
इलैंको

2

यदि आप WP-CLI स्थापित करते हैं, तो आप कमांड लाइन से उनके स्लग और संस्करण के साथ प्लगइन्स की सूची प्राप्त कर सकते हैं:

> wp plugin list

मुझे पता है कि शायद वह नहीं है जो आप चाहते हैं, अगर आपको कोड में स्लग खोजने की आवश्यकता है, लेकिन इसने मुझे टीजीएम-प्लगिन-एक्टिवेशन प्लगइन के साथ काम करते समय मदद की है।

मुझे WP-CLI के बिना वर्डप्रेस के साथ काम करना मुश्किल लगता है, सामान्य तौर पर यह वर्डप्रेस से संबंधित कई सामान्य कार्यों के लिए एक बहुत ही उपयोगी उपकरण है।


2

प्लगइन (मुख्य) फ़ाइल और प्लगइन के बीच का अंतर एक जगह है जहाँ वर्डप्रेस कोडेक्स बहुत बेहतर कर सकता है। मैं आपके भ्रम को समझता हूं क्योंकि मैंने इसे हाल ही में महसूस किया है (हताशा के साथ मिश्रित)।

यह मैंने वर्डप्रेस कोर कोड पर कुछ "जासूसी काम" करके सीखा है।

प्लगइन फ़ाइल

यह एक अनोखा तरीका है जिससे वर्डप्रेस एक प्लगइन की पहचान और रिकॉर्ड करता है। यह प्लगइन की डायरेक्टरी और मुख्य प्लगइन फाइल से बना होता है (एक फ़ाइल हेडर के साथ जो विभिन्न प्लगइन विवरण जैसे संस्करण, लेखक, आदि) के साथ है।

यह कुछ इस तरह दिखेगा: your-plugin-directory/main-file.php

यदि आप सक्रिय प्लगइन्स डेटा get_option( 'active_plugins' )को देखते हैं (द्वारा लौटाया गया है ), तो आप देखेंगे कि वर्डप्रेस को केवल प्लगइन्स को ठीक से पहचानने के लिए इस प्लगइन फ़ाइल की आवश्यकता है।

आप इसे अपने प्लगइन की मुख्य फ़ाइल सापेक्ष पथ (उस wp-content/plugins/निर्देशिका के सापेक्ष ) के रूप में सोच सकते हैं । आप इस तरह से कुछ के साथ मुख्य प्लगइन फ़ाइल के पूर्ण पथ "रचना" कर सकते हैं:trailingslashit( WP_PLUGIN_DIR ) . $plugin_main_file

कोर ही प्लगइन फ़ाइल को इस तरह से उत्पन्न करता है:

$plugin_main_file = plugin_basename( trim( $plugin_main_file_absolute_path ) );

प्लग इन स्लग

प्लगइन "स्लग" की अपेक्षा करेगा कि प्लगइन के लिए कुछ प्रकार के मानकीकृत आईडी हो जैसे पोस्ट स्लग पोस्ट के लिए है - इसलिए आप इस "स्लग" का उपयोग वर्डप्रेस कोर कार्यों को प्रदान करने और चीजों को प्राप्त करने के लिए कर सकते हैं।

ज़रुरी नहीं। प्लगइन स्लग (या किन मामलों के लिए थीम) के संदर्भ के लिए कोर की खोज करने और लगभग कुछ भी नहीं खोजने के बाद, मुझे लगता है कि मेरे पास इस पर एक पकड़ है।

एकमात्र असली स्लग वे हैं जो एक अद्वितीय URL के माध्यम से सुलभ होने वाली चीज़ों के लिए हैं: पोस्ट, पेज, टैक्सोनॉमी, आदि। यह किसी चीज़ का नाम लेने के लिए (एक पोस्ट शीर्षक की तरह) और उस के URL अनुकूल संस्करण उत्पन्न करने का पूरा बिंदु है: उपयोग करने के लिए यह एक URL में है।

लेकिन हम URL में विषय / प्लगइन्स "स्लग" का उपयोग कहां करते हैं?

हम अलग-अलग वर्डप्रेस इंस्टॉलेशन पर ऐसा नहीं करते हैं - न तो WP एडमिन या फ्रंटएंड में।

हालाँकि, वर्डप्रेस कोड, WordPress.org साइट के साथ बहुत अधिक उलझी हुई जगह है लोगों को दोनों के बीच अंतर करने में मुश्किल समय आ रहा है, जिसमें यह भी शामिल है कि डेवलपर्स के बीच किसी तरह से आम हो गया है। WordPress.org थीम या प्लगइन स्लग को पोस्ट या पेज स्लग के समान काम करना चाहिए।

वे एक ही उद्देश्य से लेकिन अलग-अलग वेबसाइटों पर काम करते हैं । WordPress.org पर उनका उपयोग दूसरों की थीम को विशिष्ट रूप से पहचानने के लिए किया जाता है, और बाकी (जैसे URL में https://wordpress.org/plugins/akismet/) से एक प्लगइन ।

लेकिन जब यह अलग-अलग वर्डप्रेस इंस्टॉलेशन की बात आती है , तो समान विशिष्टता की गारंटी नहीं दी जा सकती क्योंकि इसे लागू करने का कोई अधिकार नहीं है (जैसे WordPress.org पर)। यह काम कर सकता है अगर सभी प्लगइन्स और थीम WordPress.org से आए, लेकिन शुक्र है कि ऐसा नहीं है।

वर्डप्रेस कोड थीम / प्लगइन स्लग के साथ क्या करता है?

वर्डप्रेस कोर कोड थीम / प्लगइन्स को इंस्टॉल करने, एक्टिवेट करने, अपडेट करने, डिलीट करने जैसे काम करने के लिए थीम / प्लगइन स्लग पर निर्भर नहीं करता है

थीम के लिए, यह थीम डायरेक्टरी पर निर्भर करता है क्योंकि थीम में मुख्य एंट्री पॉइंट style.cssफ़ाइल है (आप अपने थीम विवरण हेडर को होल्ड करने के लिए किसी अन्य सीएसएस फ़ाइल का उपयोग नहीं कर सकते हैं)।

प्लगइन्स के लिए, यह प्लगइन निर्देशिका और मुख्य प्लगइन फ़ाइल पर निर्भर करता है , क्योंकि प्लगइन्स अपनी मुख्य फ़ाइल को कॉल कर सकते हैं, हालांकि वे पसंद करते हैं।

केवल एक चीज जिसके लिए कोर थीम / प्लगइन्स स्लग का उपयोग करता है , वह है। जब वह वर्डप्रेस.ऑर्ग डायरेक्टरी से थीम और प्लगइन्स को संभालता है: प्लगइन्स की सूचियाँ प्राप्त करना, अपडेट की जाँच करना, निर्देशिका उपयोग डेटा पर वापस रिपोर्ट करना, और इसी तरह।


प्लगइन स्लग के बारे में चीजों को लपेटने के लिए : जब भी आपको slugएंट्री के साथ प्लगइन डेटा मिलेगा , 99% समय यह प्लगइन के वर्डप्रेस.org स्लग को संदर्भित करेगा

हम प्लगइन्स की पहचान कैसे करते हैं?

यदि आप किसी वर्डप्रेस इंस्टॉलेशन पर प्रोग्राम को सक्रिय रूप से सक्रिय करना, अपडेट करना, निष्क्रिय करना या हटाना चाहते हैं, तो आपको प्लगइन फाइल का उपयोग करने की आवश्यकता है आप इसे अपने प्लगइन की मुख्य फ़ाइल से प्राप्त कर सकते हैं :

$plugin_file = plugin_basename( __FILE__ );

यदि आप किसी अन्य प्लगइन से एक निश्चित प्लगइन को लक्षित करना चाहते हैं , तो चीजें थोड़ी मुश्किल हो जाती हैं क्योंकि आपको "अनुमान" के एक बिट पर भरोसा करने की आवश्यकता होती है।

आप प्लगइन नाम को हार्ड-कोड कर सकते हैं, सभी प्लगइन्स की सूची में प्लगइन खोजें (get_plugins () देखें ) और वहाँ से प्लगइन फ़ाइल प्राप्त करें।

यदि आप एक वर्ग या फ़ंक्शन को जानते हैं जो उस प्लगइन द्वारा परिभाषित किया गया है तो आप प्रतिबिंब का उपयोग कर सकते हैं ( कक्षाओं के लिए यह उत्तर और कार्यों के लिए यह एक देखें )।


मुझे आशा है कि यह आपकी और दूसरों की मदद करता है जो "प्लगइन स्लग" से निपटने में एक कठिन समय हो सकता है। यह मुझे कुछ घंटे बचा सकता था :)


0

मूल पोस्ट के बाद से ही स्पष्ट करने के लिए।

जिस तरह से मैंने प्लगइन स्लग पाया है वह पहले आपके प्लगइन फ़ोल्डर में नेविगेट करके फिर प्लगइन से जुड़े फ़ोल्डर को खोल रहा है, और अंत में उस फ़ाइल को ढूंढ रहा है जिसमें नीचे का कोड है। एक बार जब आप इस फाइल को ढूंढ लेते हैं, तो फाइल का नाम माइनस हो जाता है, एक्सटेंशन आपके प्लगइन स्लग होना चाहिए।

उदाहरण के लिए, अगर मुझे उन्नत-प्लगइन-awesomeness.php नाम की फ़ाइल में नीचे कोड मिला, तो मेरा स्लग उन्नत-प्लगइन-awesomeness होगा।

उम्मीद है की यह मदद करेगा!

/*
Plugin Name: Name of plugin here
Version: 2.4.6
Description: plugin description here
Author: plugin author here

-1 के रूप में जबकि अधिकांश फ़ाइल नाम और निर्देशिका मेल खाते हैं, यह एक विश्वसनीय तरीका नहीं है क्योंकि अपडेट स्लग वास्तव में निर्देशिका है - फ़ाइल नाम नहीं (जब तक कि कोई निर्देशिका न हो।)
मैजिक

निर्देशिका भी नहीं! मेरा अद्यतन उत्तर देखें, यह वास्तव में प्लगइन नाम से आता है।
माजिक

0

दुर्भाग्य से स्लग को अपडेट एपीआई के माध्यम से लौटाया जाता है, इस सवाल का जवाब इतना स्पष्ट नहीं है जब तक कि आप खुद एपीआई की क्वेरी न करें। हालाँकि, यदि आप अपने वर्तमान प्लगइन स्लग और संबंधित प्लगइन डेटा की सूची देखना चाहते हैं, तो आप बस यह कर सकते हैं:

print_r(get_site_transient('update_plugins'));

लेकिन, यह अन्य 12 घंटों के लिए नए इंस्टॉल किए गए प्लगइन पर जानकारी नहीं देगा, आपको उन लोगों के लिए कुछ अलग करना होगा, जैसे। से कोड का एक संशोधित संस्करण का उपयोग wp_update_pluginsमें wp-includes/update.php...

इसका परीक्षण करने के लिए ऐसा करने के बाद, यह पुष्टि करने लगता है कि, प्लगइन फ़ाइलनाम या स्थान या अपरकेस की परवाह किए बिना, यह वास्तव में है Plugin Nameकि अद्यतन स्लग उत्पन्न करता है, सबसे अधिक संभावना है sanitize_title। इसलिए मेरा मानना ​​है कि सही उत्तर होना चाहिए:

// if you have the plugin basename:
// $pluginfile = WP_PLUGIN_DIR.'/'.$pluginbasename;

// otherwise if you have the absolute path already:
$plugin = get_plugin_data($pluginfile);
$pluginslug = sanitize_title($plugin['Name']);

+1 और एक अतिरिक्त नोट यह है कि यह समय के साथ-साथ बदल सकता है क्योंकि यह wordpress.org टीम द्वारा स्पष्ट किया गया था कि स्लग गणना पद्धति अभी पूरी तरह से अंतिम नहीं है
मार्क कपलुन

मुझे यकीन नहीं है कि यह सटीक है, मैं इसे एक प्लगइन के लिए करने का प्रयास कर रहा था लेकिन यह विफल रहता है: प्लगइन का नाम जैसा कि "उत्तरदायी वर्डप्रेस स्लाइडर - सोलिलॉक्वाय लाइट" है और स्लग है: सोलिलोक्वाय-लाइट
क्रिस

मुझे संदेह है कि यह स्लग उस समय उत्पन्न होता है जब प्लगइन रिपॉजिटरी को सबमिट किया जाता है और बाद में नाम के साथ नहीं बदलता है ... ज्यादातर मामलों में यह निर्देशिका के नाम से मेल खाता है, लेकिन अगर दोनों के अपवाद हैं, तो यह हो सकता है एक हो या दूसरा। यह आदर्श नहीं है: - /
मैजिक

0

आप प्लगइन का फ़ोल्डर नाम (PHP5.3 +) DIR को plugin_basename () में पास करके प्राप्त कर सकते हैं , जैसे:

$plugin_foldername = plugin_basename( __DIR__ );

0

इसे इस्तेमाल करे:

function get_slugname(){
    $tmp = array();
    $plugins_all = get_plugins() ;
    $plugin_slug = explode('/',dirname(plugin_basename(__FILE__)));
    foreach ($plugins_all as $key=>$value) {
        if ($plugin_slug[0] == explode('/',$key)[0] ) {
        $tmp = $value;
        $tmp['slug'] = explode('/',$key)[0];
        $tmp['file'] = explode('/',$key)[1];
        }
    }
return $tmp;
}

1
कृपया अपना उत्तर संपादित करें और यह कोड क्या करता है, इसका स्पष्टीकरण जोड़ें।
नाथन जॉनसन

0

अधिकांश प्लगइन्स के लिए, "स्लग" निर्देशिका नाम के समान होगा। यद्यपि .org लोग निर्देशिका नाम को अपनी इच्छानुसार कुछ भी सेट कर सकते हैं।

$slug = (dirname(plugin_basename(__FILE__)));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.