Ajax कॉल और JSON को वर्डप्रेस में कैसे प्रबंधित करें


13

मेरे पास एक कस्टम पोस्ट प्रकार है जिसे मैं jQuery के माध्यम से एक्सेस करना चाहता हूं - अधिमानतः JSON का उपयोग करके।

तो पहले बातें पहले। एक ऐसा फंक्शन बनाना जो रिटर्न / इकोस जोंस काफी आसान हो, लेकिन मैं jquery के माध्यम से इसे कैसे एक्सेस करूंगा।

जैसा कि माइक इस प्रश्न में लिखते हैं , वह - जहां तक ​​मैं समझता हूं - इसे वर्डप्रेस रूट में रखता है। जो php फ़ाइल नाम का उपयोग करके इसे एक्सेस करने योग्य बना देगा - लेकिन क्या यह अनुशंसा योग्य है? मैं इसे एक प्लगइन फ़ोल्डर के अंदर रखना चाहूंगा।

मैंने वर्डप्रेस कोडेक्स को पढ़ने की कोशिश की है, लेकिन जिस तरह से अजाक्स कॉल को संभाला जाता है, वह मुझे भ्रमित करता है, जैसा कि आप प्रत्येक ajax कॉल को व्यवस्थापक-ajax.php पर पोस्ट कर रहे हैं, भले ही यह कोई व्यवस्थापक पृष्ठ न हो?

क्या कोई कृपया मुझे होने वाली समस्याओं को सीधा कर सकता है?

/ तूफान

संपादित करें

समस्या मुझे समझ में आ रही थी कि कैसे अक्सैक्स कॉल को वर्डप्रेस में किया जाना था, साथ ही कॉल करने के लिए / हैंडल करने के लिए अपने php और js कोड को कहां रखा जाए।

मेरे द्वारा लिंक किए गए दूसरे प्रश्न में, आपने फ़ाइल को wp रूट में रखने के लिए एक फंक्शन बनाया - मैं ऐसा नहीं करना चाहता। लेकिन मैंने अब सीख लिया है कि wp_ajax_ (nopriv _) [क्रिया] का उपयोग कैसे किया जा सकता है और प्रभावी रूप से json i create का उपयोग कर सकता है। शेष समस्या वह है जहां मुझे कॉल करने के लिए JS को स्थान देना चाहिए। मैं इसे प्लग इन जेएस फ़ाइल में रखना चाहता हूं, लेकिन जैसा कि यह पृष्ठ में प्रस्तुत किया जाना है, कि व्यवस्थापक साइट पर, अजाक्सुरल को परिभाषित नहीं किया गया है, इसलिए मुझे php का उपयोग करके प्रतिध्वनि करना होगा।

echo admin_url('admin-ajax.php');

तो सवाल यह हो जाता है कि मुझे इस php को जावास्क्रिप्ट के साथ कैसे संयोजित करना चाहिए, और फिर मुझे इसे कैसे फ़ाइल या स्क्रिप्ट के रूप में देखना चाहिए, यह कैसे करना चाहिए।


मैं और अधिक वर्णनात्मक शीर्षक देने के लिए आपके प्रश्न के शीर्षक को संपादित करना चाहता हूं, लेकिन पढ़ने के बाद मैं अभी भी 100% निश्चित नहीं हूं कि आपका प्रश्न क्या है। क्या आप बस पूछ रहे हैं कि JSON फ़ीड कैसे एक्सेस करें, कस्टम पोस्ट प्रकारों से असंबंधित (क्या CPT वास्तव में आपके प्रश्न पर आयात नहीं करता है?) और क्या यह महत्वपूर्ण है कि यह रूट में न हो? क्या यह व्यवस्थापक कार्यक्षमता के लिए है? शायद यह समझाने में मदद करेगा कि क्या आप वास्तव में उस तकनीकी दृष्टिकोण के अलावा अंतिम उपयोगकर्ता के दृष्टिकोण से पूरा करने की कोशिश कर रहे हैं जो आप संघर्ष कर रहे हैं?
माइकस्किंकेल

हाँ, मुझे लगता है कि शीर्षक सबसे वर्णनात्मक कभी नहीं हो सकता है। मैं बस थोड़े से कुछ कर रहा हूं क्योंकि मैं पहले से भी बदतर स्थिति में था। अधिक जानकारी के साथ संपादित पोस्ट।
तूफान

कस्टम पोस्ट प्रकार जिसे मैंने अभी डाला है, क्योंकि json-api प्लगइन जो लोकप्रिय लगता है, वास्तव में कस्टम-पोस्ट-प्रकारों को कवर नहीं करता है।
स्टॉर्म

जवाबों:


17

अजाक्स हैंडलर

यह वास्तव में थोड़ा भ्रमित है कि अजाक्स हैंडलर wp-admin/निर्देशिका में है, लेकिन हां, आप इसे उपयोग कर सकते हैं और गैर-व्यवस्थापक के लिए भी उपयोग करना चाहिए। फिर आप wp_ajax_nopriv_[action]सामान्य के बजाय हुक के लिए एक हैंडलर पंजीकृत करते हैं wp_ajax_[action]। इस मामले में आपको केवल पहली पंक्तियों काadmin-ajax.php पालन करना होगा , क्योंकि एक उपयोगकर्ता द्वारा लॉग इन नहीं किया गया एक अनुरोध पहले ही पृष्ठ को पंक्ति 50 से छोड़ देगा।

इसलिए हुक के लिए एक फ़ंक्शन पंजीकृत करें wp_ajax_nopriv_get_custom_post_data, और यह निर्धारित करने के लिए कहा जाएगा यदि आप पैरामीटर सेट के admin-ajax.phpसाथ पूछते हैं । अपने हैंडलर के अंत में स्वयं कॉल करना सुनिश्चित करें , अन्यथा डिफ़ॉल्ट वापस कर दिया जाएगा। और लॉग-इन संस्करण भी पंजीकृत करें, (उसी हैंडलर फ़ंक्शन, कोई समस्या नहीं), क्योंकि यदि आप अपनी साइट पर लॉग इन हैं, तो आप हुक नहीं मारेंगे।actionget_custom_post_datadie()die(-1)wp_ajax_get_custom_post_datanopriv

जावास्क्रिप्ट के लिए सर्वर-साइड कॉन्फ़िगरेशन

सर्वर-साइड कॉन्फ़िगरेशन डेटा ( admin-ajax.phpurl की तरह ) भेजने की ट्रिक है wp_localize_script()। आप इसे कुंजियों और मानों का एक सरणी देते हैं, जो पृष्ठ के शीर्ष में शामिल किया जाएगा। यह संभवतः मूल रूप से स्थानीयकरण के तार के लिए बनाया गया था, लेकिन आप इसका उपयोग कॉन्फ़िगरेशन डेटा भी पास करने के लिए कर सकते हैं।

wp_localize_script('storm_json_config', 'storm_config', array(
    'ajaxurl' => admin_url('admin-ajax.php'),
));

storm_json_configहैंडल नाम है (यदि आप इसे बाद में storm_configसमाप्त करना चाहते हैं), जावास्क्रिप्ट ऑब्जेक्ट का नाम है जिसमें आपका डेटा होगा। तो आपकी स्थिर जावास्क्रिप्ट फ़ाइल में एक लाइन हो सकती है जैसे jQuery.post(storm_config.ajaxurl, ...)

इसी तरह के सवाल का बज़ट जवाब भी देखें ।

प्लगइन से स्थैतिक जावास्क्रिप्ट डायर

अपने स्वयं के प्लगइन dir से एक स्थिर जावास्क्रिप्ट फ़ाइल लोड करने के लिए, आप उपयोग करते हैं wp_enqueue_script()। यह कुछ इस तरह दिखेगा:

wp_enqueue_script('storm_json', plugin_dir_url(__FILE__) . 'js/json.js', array('jquery'), '20101105');

storm_jsonफिर से एक हैंडल नाम कहां है, फिर आप फ़ाइल को लिंक देते हैं, फिर निर्भरताएं (हो सकती हैं null), और फिर एक वर्जन नंबर जिसे अपडेट पर ब्राउज़र कैश को हराने के अनुरोध के बाद जोड़ा जाएगा।


बहुत बढ़िया जवाब। यह मैं सोच रहा था, और मुझे लगता है कि यह काम करने के लिए मिल गया है। अब मैं /wp-admin/admin-ajax.php?action=Iaction] का उपयोग कर सकता हूं और एक json परिणाम प्राप्त कर सकता हूं। मेरी समस्या अब है जहाँ ajax कॉल करने के लिए js लगाना है। चूंकि मुझे गूंज admin_url ('admin-ajax.php') डालने की आवश्यकता है; यूआरएल के रूप में, मैं इसे अपने प्लगइन्स जेएस फ़ाइल में नहीं डाल सकता। तो मैं इसे कैसे लागू करूँगा? मैं न केवल एक पृष्ठ के बीच में स्क्रिप्ट प्रिंट करना चाहता हूं।
तूफान

@ स्टॉर्म: मैंने अपने उत्तर का विस्तार किया wp_localize_script(), जिसका उपयोग आप सर्वर-साइड से ब्राउज़र में कॉन्फ़िगरेशन डेटा भेजने के लिए कर सकते हैं। (छोटा टिप: यदि आप @किसी उपयोगकर्ता नाम से जुड़ते हैं, तो उस व्यक्ति को आपके उत्तर की सूचना मिल जाएगी। इसलिए @Mike: I updated the titleसुनिश्चित करें कि वह आपकी टिप्पणी देखता है)
Jan Fabry

धन्यवाद एक गुच्छा जन। मुझे अब लगता है कि मैं पूरे पैकेज को समझता हूं। मुझे इसे पूरी तरह से समझने के लिए इसके साथ थोड़ा फील करना पड़ेगा लेकिन आपको इससे बहुत मदद मिली है! उत्तर स्वीकृत =) btw @ नोट के लिए धन्यवाद। लेकिन जैसा कि मैं अब आपके उत्तर पर टिप्पणी कर रहा हूं, आपको अभी भी एक चेतावनी मिलेगी?
तूफान

@ स्टॉर्म: हां, अलर्ट उस प्रश्न या उत्तर के लेखक के पास जाता है जिस पर आप टिप्पणी कर रहे हैं, और इसके अलावा यह एक अन्य प्रतिभागी के पास जा सकता है जिसका आप @ -comment में उल्लेख करते हैं। इसलिए मुझे आपकी अधिसूचना "मुफ्त में" मिल गई, लेकिन अगर आपने मुझे शामिल नहीं किया, तो आपको इस संदेश के लिए एक नहीं मिलेगा। स्टैक एक्सचेंज नेटवर्क के सामान्य मेटा साइट पर एक पूर्ण विवरण है
फेब पर जनवरी फेब्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.