2012-12-13 17 views
9

मैं एक प्लगइन रिवर्स इंजीनियर कोशिश कर रहा हूँ: http://wordpress.org/extend/plugins/wordpress-social-login/Wordpress WP-load.php

इसे का एक हिस्सा है, वहाँ इस लाइन है:
(मैं एक कठिन समय पहले एक समझ आ रही है, अगर वे यह कर के लिए कुछ है बाकी संदर्भ के लिए होते हैं।)

require_once(dirname(dirname(dirname(dirname(__FILE__)))) . '/wp-load.php'); 

define('WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL', plugins_url() . '/' . basename(dirname(__FILE__))); 
define('WORDPRESS_SOCIAL_LOGIN_HYBRIDAUTH_ENDPOINT_URL', WORDPRESS_SOCIAL_LOGIN_PLUGIN_URL . '/hybridauth/'); 

मेरा प्रश्न है ... वास्तव में यह wp-load.php फ़ाइल है कि यह कोड के लिए आवश्यक होने की जरूरत है क्या? इसे देखकर, मैं समझता हूं कि यह साइट के लिए सही कोर वर्डप्रेस फ़ाइलों को सही ढंग से चल रहा है (functions.php, wp-settings.php, wp-config.php आदि ...)
तथ्य यह नहीं है कि प्लगइन पहले से ही चल रहा है wp-load.php लोड किया गया है ?
इसके अलावा यह संसाधनों का पूरा अपशिष्ट है क्योंकि इसमें कई फाइलें शामिल हैं जिनमें अन्य फाइलें भी शामिल हो सकती हैं और यह आवश्यक फाइलों के अंतहीन पाश की तरह है, प्रत्येक एक दूसरे के भीतर, जिसे दो बार लोड किया जा रहा है .. (या यदि अन्य प्लगइन्स इस तरह की विधि का भी उपयोग करें)

तो यह वास्तव में क्या करता है?

पीएस; Google- ing द्वारा मुझे जो भी मिला वह यह है कि इसे सही तरीके से कैसे शामिल किया जाए (क्योंकि पथ बदलते-सक्षम हैं) - लेकिन यह मेरी समस्या/प्रश्न नहीं है।

उत्तर

23

मेरा प्रश्न है ... इस wp-load.php फ़ाइल में वास्तव में क्या है जो इसे कोड द्वारा आवश्यक होने की आवश्यकता है?

सभी कोर वर्डप्रेस कार्यक्षमता। इसमें थीम फाइलें, सक्रिय प्लगइन्स की सभी फाइलें इत्यादि शामिल हैं। लेकिन इस तरह से वर्डप्रेस लोड करना अनुरोधित यूआरएल को पार्स नहीं करता है और वर्डप्रेस क्वेरी नहीं चलाता है (WP ऑब्जेक्ट को शुरू करके, और न ही WP_Query ऑब्जेक्ट्स) ।

यह को देख कर, सब मैं समझता हूँ कि यह साइट के लिए महत्वपूर्ण कोर वर्डप्रेस फ़ाइलों को लोड करता है सही ढंग से चलाना है (functions.php, wp-settings.php, wp-config.php आदि ...)

हाँ, आप ' सही ढंग से समझा है।

क्या तथ्य यह नहीं है कि प्लगइन पहले से चल रहा है wp-load.php लोड हो गया है?

तो प्लगइन कोड से वर्डप्रेस (उदाहरण के लिए आदेश में एक व्यवस्थापक पृष्ठ प्रदर्शित करने के लिए, या यह शुरू में लोड प्लगइन फ़ाइल से शामिल किया गया था) लागू किया गया था - तो हाँ, यह मतलब है कि wp-load.php पहले से ही लोड किया गया है।

कभी कभी, हालांकि, एकल फ़ाइलें (उदाहरण http://example.com/wp-content/plugins/my-plugin/sample.php के लिए), के बजाय कुछ वर्डप्रेस संचालित पेज (उदाहरण के http://example.com/?my_plugin_action=sample या http://example.com/wp-admin/admin-ajax.php के लिए) के लिए करने के लिए प्लग-इन प्रत्यक्ष अनुरोध।

कैसे पहले यूआरएल my-plugin प्लगइन निर्देशिका में एक विशिष्ट फ़ाइल का संदर्भ और दूसरा एक के साथ एक विशिष्ट क्वेरी तर्क जोड़ा साइट के मुख पृष्ठ पर चला जाता है, या तीसरा उदाहरण है, जहां संदर्भित फ़ाइल में admin-ajax.php है देखें wp-admin निर्देशिका - यह एक विशेष फ़ाइल है, जो प्लगइन के लिए AJAX अनुरोध करने में आसान बनाता है (यह फ़ाइल वर्डप्रेस कोर भी लोड करती है और कुछ एक्शन हुक निकालती है)।

पहले संदर्भ के मामले में, यदि प्लगइन कुछ वर्डप्रेस कार्यक्षमता (डेटाबेस को संदर्भित करने के लिए, पदों में हेरफेर करने के लिए) का उपयोग करना चाहता है, तो इसे wp-load.php सहित वर्डप्रेस कोर फ़ाइलों को लोड करने की आवश्यकता है।

यह भी संसाधनों की एक पूरी बर्बादी है क्योंकि यह रूप में अच्छी तरह या यहां तक ​​कि अन्य फ़ाइलों शामिल हो सकते हैं तो कई फ़ाइलें शामिल है और यह आवश्यक फ़ाइलों की एक अंतहीन लूप की तरह है, एक और भीतर प्रत्येक, जो दो बार लोड किया जा रहा है .. (अधिक करता है, तो अन्य प्लग-इन भी विधि के इस प्रकार)

नोट require_once(... में _once भाग का उपयोग - यह पीएचपी बताता है कि यह पहले से ही शामिल नहीं किया गया है फ़ाइल केवल शामिल करने के लिए। इसलिए कोई विवाद नहीं होगा, और PHP द्वारा बहुत अधिक स्मृति का उपयोग नहीं किया जाएगा। यद्यपि - यदि आप किसी ऐसे संदर्भ में हैं जहां वर्डप्रेस पहले ही शुरू हो चुका है, तो आपको require फ़ंक्शन को कॉल नहीं करना चाहिए।


तो मूल रूप से प्लगइन लेखक प्लगइन फ़ाइल में कुछ अनुरोध किए जाने की अपेक्षा करता है जिसमें आपको यह कोड मिला। चूंकि लेखक इस फ़ाइल में वर्डप्रेस कार्यक्षमता का उपयोग करना चाहता है, इसलिए वह मूल कार्यों को लोड करने के लिए wp-load.php फ़ाइल को आमंत्रित करता है।

मुझे लगता है कि यह सर्वर पर लोड को कम करने के लिए किया जाता है, हालांकि plugins_loaded एक्शन हुक पर चलने वाले कुछ हुक और एक कस्टम $_GET पैरामीटर होम यूआरएल में जोड़ा गया है, तो परिणाम अभी भी सुंदर होना चाहिए बंद करे।

मैं व्यक्तिगत रूप से दूसरा विकल्प पसंद करते हैं, लेकिन जैसे मैंने कहा, सहित wp-load.php कुछ जटिल सामान (यूआरएल पार्स करने और डेटाबेस क्वेरी/यां) चलने से वर्डप्रेस कर पाएगा।

यदि अभी भी कुछ है, तो आप इसके बारे में काफी कुछ नहीं समझते हैं - यहां एक टिप्पणी पोस्ट करें और मैं आगे की व्याख्या करने की कोशिश करूंगा।

+1

ग्रेट, विस्तृत उत्तर! आपको बहुत बहुत धन्यवाद! :) – Asaf

4

जो मैंने पढ़ा है उससे आमतौर पर प्लगइन में डब्ल्यूपी-लोड शामिल होता है जब डेटाबेस उपयोग की आवश्यकता होती है, लेकिन यह एक बुरी पसंद है क्योंकि इससे कई समस्याएं बढ़ती हैं। आप यहाँ में कुछ प्रासंगिक लेख देख सकते हैं: http://ottodestruct.com/blog/2010/dont-include-wp-load-please/ (यदि इस लिंक कभी हटा दी जाती है, See that page here)

1

शायद एक दोहरी जांच।

requ_once() का अर्थ है कि यदि यह पहले ही लोड हो चुका है, तो यह फिर से लोड नहीं होगा।

1

wp-load.php बाहरी स्क्रिप्ट से WP लोड करने का एक तरीका है, जो अन्य सुविधाओं के बीच WP कार्यों का उपयोग करने की अनुमति देता है।

लेकिन, जैसा कि आप कहते हैं, यह आवश्यक नहीं है क्योंकि यह एक प्लगइन है। फिर भी, आप यह नहीं समझते कि आपको अपने प्रश्न में कोड कहां मिला, क्योंकि wp-load.php वास्तव में स्टाइल शीट निर्देशिका से अलग निर्देशिका में स्थित फ़्रंट-एंड पेज या स्क्रिप्ट के लिए आवश्यक है, उदाहरण के लिए, यहां तक ​​कि जब वे एक का हिस्सा हैं लगाना।

व्यवस्थापक क्षेत्र में प्लगइन पृष्ठों को WP को फिर से लोड करने की आवश्यकता नहीं है क्योंकि यह पहले ही लोड हो चुका है, लेकिन फ्रंट-एंड पृष्ठों को इसे लोड करना होगा।

संक्षेप में, WP कार्यों और चरों तक पहुंच के लिए wp-load.php को शामिल करने के कई कारण हैं।

2

wp-load.php वर्डप्रेस पर्यावरण बूटस्ट्रैप करने के लिए ज़िम्मेदार है जो प्लगइन को देशी वर्डप्रेस कोर फ़ंक्शन का उपयोग करने में सक्षम बनाता है।

अब

के लिए के रूप में तथ्य यह है कि प्लगइन पहले से ही चलाता है इसका मतलब है WP-load.php भरी हुई है नहीं है?

बिलकुल नहीं!

यदि आप सीधे प्लगइन फ़ाइल तक पहुंचते हैं तो इसका मतलब यह नहीं है कि आपके पास पूरा वर्डप्रेस वातावरण है और आप देशी कोर फ़ंक्शंस का उपयोग करने में सक्षम नहीं हैं जब तक कि आप wp-load.php शामिल न करें।

1

इसमें wp-load.php शामिल होगा यदि फ़ाइल को कहीं भी लोड किया गया हो, तो स्तर के बावजूद, wp-content निर्देशिका के भीतर।

if(!defined(ABSPATH)){ 
    $pagePath = explode('/wp-content/', dirname(__FILE__)); 
    include_once(str_replace('wp-content/' , '', $pagePath[0] . '/wp-load.php')); 
} 
+0

क्या यह wp-content फ़ोल्डर से प्राप्त करने का प्रयास नहीं कर रहा है? यह वहां क्यों होगा? यह जड़ में है, आमतौर पर कम से कम। –

संबंधित मुद्दे