कैसे सही तरीके से प्लगइन्स में PHP फ़ाइलों को शामिल करने के लिए


59

मेरी समस्या तब है जब मैं मुख्य प्लगइन फाइल पर PHP फाइल कुछ इस तरह से शामिल करता हूं:

include(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
include_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');
// or
require_once(WP_PLUGIN_URL . '/wordpress-group-buying/ipn/paypal-ipn.php');

और उस फ़ाइल पर मेरे पास वर्डप्रेस फ़ंक्शन का कॉल है जैसे:

add_action('hook', 'callback');

और मुझे मिलता है:

घातक त्रुटि: अपरिभाषित फ़ंक्शन add_action पर कॉल करें ()

अब इससे पहले कि आप "उपयोग if(**function_exists**('add_action')){" कहें, अगर मैं इसका उपयोग करता हूं तो यह सिर्फ काम नहीं करता है।

प्रश्न:

  • ऐसा करने का सही तरीका क्या होगा?
  • के बीच अंतर क्या हैं include, include_once, requireऔर मैं डायन का उपयोग करते हैं?

यदि आपको वह संदेश मिलता है तो आप कुछ गलत कर रहे हैं। सुनिश्चित करें कि आप इन फ़ाइलों से कार्य चलाना शुरू करने से पहले कोई भी फाइल शामिल करते हैं
onetrickpony

यह नहीं है, कॉल सहित फ़ाइलों के भीतर मैं कर रहा हूँ!
बैनेटर्न

योग्य, अब मैं WP_PLUGIN_URLऊपर आपके कोड में देख रहा हूँ :)
onetrickpony

3
बहुत सीधे शब्दों में कहें तो आप केवल एक फ़ाइलपथ के माध्यम से फ़ाइलें शामिल कर सकते हैं (URI नहीं)।
संपादक

1
यह कोडेक्स लेख (संभवत: आपके प्रश्न पूछे जाने के बाद लिखा गया) काफी सहायक है: codex.wordpress.org/Determining_Plugin_and_Content_Directories
henrywright

जवाबों:


88

इस पार्टी के अंत में आ रहा है, लेकिन यहाँ "वर्डप्रेस" तरीका है: उपयोग plugin_dir_path( __FILE__ ), जैसे:

<?php
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');
?>

ध्यान दें कि समारोह है लौटने के बाद स्लैश filepath के लिए।


3
ध्यान दें कि __FILE__इसका उपयोग करके आप इसे जिस मौजूदा फ़ाइल से कॉल करते हैं, उसके सापेक्ष आउटपुट करेगा, इसलिए यदि आपका includeस्टेटमेंट आपकी प्लगइन फाइल संरचना के अंदर एक उपनिर्देशिका से किया गया है तो आपको उपनिर्देशिका भी वापस मिल जाएगी।
स्क्वायरकैंडी

वैकल्पिक - यदि आप सापेक्ष रास्तों की आवश्यकता है, तो हैrequire_once(plugin_dir_path(__DIR__).'/myfile.inc');
FoggyDay

10

मैंने कुछ प्लगइन्स के माध्यम से देखा, जो मैंने पहले उन अलग-अलग तरीकों को देखने के लिए बनाए थे, जिन्हें मैंने प्लगइन्स के अंदर अतिरिक्त फ़ाइलों को शामिल किया है और मैंने देखा कि दो तरीके हैं जिनका आप उपयोग कर सकते हैं, संभवतः अधिक हैं।

अपने प्लगइन निर्देशिका को परिभाषित करें

आपके प्लगइन के अंदर वर्तमान प्लगइन स्थान को परिभाषित करने के लिए निम्नलिखित परिभाषा है।

उदाहरण कोड:

define( 'PLUGIN_DIR', dirname(__FILE__).'/' );  

बस एक सीधे शामिल या आवश्यकता होती है

आप बस उपयोग कर सकते हैं; नीचे दिए गए उदाहरण कोड में स्थान को संदर्भित करके अपने प्लगइन फ़ोल्डर के अंदर, शामिल करें, आवश्यकता या आवश्यकता_ शामिल करें। नीचे का उदाहरण आपके रूट प्लगइन निर्देशिका में एक फ़ाइल पर आधारित होगा, जिसमें आपके प्लगइन फ़ोल्डर के अंदर एक फ़ोल्डर से दूसरी फ़ाइल भी शामिल है।

उदाहरण कोड:

include "classes/plugin-core.php";

सापेक्ष में सभी प्रकार के घिनौने अप्रत्याशित मुद्दे शामिल हो सकते हैं।
मार्क कप्लून

5

मैं निम्नलिखित के लिए वर्डप्रेस कंस्ट्रक्शन के लिए जा रहा हूं और निम्नलिखित का उपयोग करता हूं:

require_once(dirname(__FILE__) . '/filename.php);

मुझे नहीं लगता कि यह वास्तव में आपके मुद्दे को हल करेगा, जो एक गुंजाइश मुद्दा लगता है, लेकिन यह कोड है जो मैं उपयोग करता हूं।

शामिल करने और आवश्यकता के बीच के अंतर के लिए: फ़ाइल शामिल नहीं होने पर चेतावनी
को फेंक देगा, यदि फ़ाइल नहीं मिली है तो एक घातक त्रुटि होगी।

इसमें शामिल हैं। यदि आपके पास पहले से ही शामिल है / आवश्यक है (ध्यान दें कि जहां तक ​​मैं बता सकता हूं, यह केवल एक विशिष्ट निर्देशिका में एक विशिष्ट फ़ाइल के लिए है)।


5

सबसे पहले, जवाब देने वाले सभी लोगों को धन्यवाद,

मेरी समस्या पूर्ण फ़ाइलों के साथ शामिल फ़ाइलों को कॉल कर रही थी जिस तरह से वे वर्डप्रेस के माध्यम से नहीं जाते हैं। और ऐसा इसलिए हुआ क्योंकि जैसा कि मैंने प्रश्न पर कहा था कि मैं उन्हें मुख्य प्लगइन फ़ाइल से बुला रहा था। तो तय है कि का उपयोग कर समाप्त हो गया:

include_once('/ipn/paypal-ipn.php');

मैंने वर्डप्रेस सपोर्ट के बारे में पढ़ा । और फिर से जवाब देने के लिए धन्यवाद!


क्या आप इस उत्तर ( wordpress.stackexchange.com/a/32002/123092 ) को स्वीकार करने के लिए पुनर्विचार कर सकते हैं ?
मैं सबसे बेवकूफ व्यक्ति हूँ

4

शामिल

शामिल () कथन में निर्दिष्ट फ़ाइल शामिल और मूल्यांकन करती है।

एक बार शामिल करें

शामिल_ओनसे () कथन में स्क्रिप्ट के निष्पादन के दौरान निर्दिष्ट फ़ाइल शामिल है और मूल्यांकन करता है। यह शामिल () कथन के समान व्यवहार है, एकमात्र अंतर यह है कि यदि किसी फ़ाइल से कोड पहले ही शामिल किया गया है, तो उसे फिर से शामिल नहीं किया जाएगा। जैसा कि नाम से पता चलता है, इसे सिर्फ एक बार शामिल किया जाएगा।

आवश्यकता होती है

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

एक बार ज़रूरत

आवश्यक_ऑनस () विवरण में स्क्रिप्ट के निष्पादन के दौरान निर्दिष्ट फ़ाइल शामिल है और मूल्यांकन करता है। यह आवश्यकता () स्टेटमेंट के समान व्यवहार है, एकमात्र अंतर यह है कि यदि किसी फ़ाइल से कोड पहले ही शामिल किया जा चुका है, तो उसे फिर से शामिल नहीं किया जाएगा।

उपरोक्त जानकारी PHP प्रलेखन से है, बात यह है कि एक सही नहीं है, कोड की आवश्यकता पर निर्भर करेगा, मुझे फ़ंक्शंस जैसे महत्वपूर्ण सामान पर आवश्यकता है (), लेकिन फ़्यूज़र या लूप जैसी थीम फ़ाइलों पर मैं उपयोग करता हूं शामिल करें_नहीं या शामिल करें क्योंकि मैं चेतावनी को संभाल सकता हूं और उपयोगकर्ता / आगंतुक को कह सकता हूं कि सिर्फ एक f__or के बजाय त्रुटि को रोकना


जैसा कि @mtekk का कहना है कि मैं आपको tis संरचना का उपयोग करने के लिए पुनः प्राप्त करूंगा: requ_once (dirname ( FILE )। '/filename.php);
वेबर

1

हाय @ जापानी अंग्रेजी:

जब वर्डप्रेस लोड हो रहा है तो यह add_action()फ़ंक्शन को परिभाषित करता है इससे पहले कि वह किसी भी प्लगइन्स को लोड करने का प्रयास करता है तथ्य यह है कि आप त्रुटि प्राप्त कर रहे हैं मुझे बताता है कि आप कुछ अजीब कर रहे हैं या आपके वर्डप्रेस इंस्टॉल में कुछ गड़बड़ है।

लोड करने के लिए आप अपना "प्लगइन" किसे प्राप्त कर रहे हैं ? क्या आप इसका उपयोग कर रहे हैं include*()या require*()इसे लोड करने के लिए, शायद आपकी wp-config.phpफ़ाइल में?


1
include( plugin_dir_path( __FILE__ ) . 'ipn/paypal-ipn.php');

या

define( 'PLUGIN_ROOT_DIR', plugin_dir_path( __FILE__ ) );
include( PLUGIN_ROOT_DIR . 'ipn/paypal-ipn.php');

या

$plugin_dir_path = plugin_dir_path( __FILE__ );
include( $plugin_dir_path . 'ipn/paypal-ipn.php');

नोट: प्लगइन्स का admin_enqueue_scriptsउपयोग करने के लिए .css और .js फ़ाइलों को enqueu करने के लिएplugin_dir_url( __FILE__ )

$plugin_dir_uri = plugin_dir_url( __FILE__ );
wp_enqueue_style( 'plugin-style', $plugin_dir_uri . 'css/plugin-style.css');

0

जब भी आप अपनी कार्यशील निर्देशिका के अंदर एक नई फ़ाइल बनाते हैं, तो आपको इसे हर बार शामिल करना होगा। लेकिन अपने Directroy को स्कैन करने और स्वचालित रूप से इसे संलग्न करने के लिए एक विधि का प्रयास करें, न केवल php फाइलें, जो दोनों पक्षों (बैकएंड, फ्रंट एंड) पर ठीक से php, js और css फ़िउल को शामिल करने में मदद करता है।

http://kvcodes.com/2014/05/wordpress-theme-development-include-files-automatically/


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