हे लड़का, शीर्षक डरावना लगता है ऐसा नहीं है। आपको चिंता करने की कोई ज़रूरत नहीं है क्योंकि हम इसे नीचे तोड़ देंगे। क्या आपकी थीम कस्टम वर्डप्रेस क्वेरीज़ को यादृच्छिक पोस्ट, लोकप्रिय पोस्ट, हालिया पोस्ट आदि को साइडबार या कहीं और दिखाने के लिए चल रही है? यदि हां, तो आपको संसाधनों की खपत को कम करने के साथ-साथ लोड टाइम को मदद करने के लिए इन प्रश्नों को कैश करने के लिए वर्डप्रेस क्षणिक एपीआई का उपयोग करने पर विचार करना चाहिए। इस अनुच्छेद में, हम आपको दिखाएंगे कि ट्रांसपेन्स एपीआई का इस्तेमाल करते हुए कस्टम क्वेरी को कैशिंग करके अपने वर्डप्रेस साइट को कैसे गति दें।
नोट: आपको यह समझने की ज़रूरत है कि वर्डप्रेस थीम्स कैसे काम करते हैं (लूप्स आदि), ताकि आप इस पोस्ट का अनुसरण कर सकें।
तो यह पूरे कैशिंग और क्षणिक भाषा मेरे सिर पर जा रही है। अच्छी तरह से चिंता मत करो हमें बताएं कि यह क्या करता है। असल में यदि आप लिस्ट 25 जैसी साइट चला रहे हैं और आपके साइडबार में 6 यादृच्छिक पोस्ट दिखाए जाने वाले लूप हैं, तो क्षणिक API मदद कर सकता है। जब भी कोई उपयोगकर्ता पृष्ठ को रीफ़्रेश करता है, तो आपके पास कस्टम WP क्वेरी आपके डेटाबेस में जाती है और 6 डाक यादृच्छिक पर खींचती है। यदि आप एक अपेक्षाकृत नई साइट हैं, तो यह ऐसा बुरा नहीं होना चाहिए। लेकिन अगर आपको अपनी साइट पर बहुत से लोग मिल रहे हैं, तो यह आपके एसक्यूएल सर्वर को दुर्घटनाग्रस्त कर सकता है, और आप “डाटाबेस कनेक्शन स्थापित करने में त्रुटि” स्क्रीन देखेंगे। कोड की कुछ अतिरिक्त लाइन जोड़कर, आप आसानी से उस क्वेरी के परिणामों को स्टोर कर सकते हैं (ट्रांसफर एपीआई) का उपयोग करके एक निश्चित अवधि के लिए।
यादृच्छिक पदों को खींचने के लिए हमारे पास लूप कोड का उदाहरण:
has_posts ()): $ random_query-> the_post (); ?>
साइडबार में हमारे यादृच्छिक पोस्ट क्वेरी के बारे में सबसे अच्छे भाग यह हर समय नई सामग्री दिखाया था। इसलिए 12 घंटों के लिए क्वेरी को कैश करके, हमारे पास 12 घंटे सही के लिए समान 6 पोस्ट दिखेंगे? ठीक है, हमारे दोस्त कॉन्स्टेंटिन कोव्सेनिन (@कोवसेनिन) के सुझाव के लिए हमें धन्यवाद मिला। उन्होंने सुझाव दिया कि WP_Query का उपयोग करने के बजाय, हम get_posts का उपयोग करते हैं और इसके बजाय 20 पदों को खींचते हैं। ट्रांसक्रिप्टर्स एपीआई के उपयोग से उस क्वेरी के परिणामों को कैश करें, और फिर सरणी_रेन्ड () फ़ंक्शन का प्रयोग करें, जो मूल 20 में से केवल 6 पोस्ट यादृच्छिक पर दिखाए। इस तरह हम साइट पर यादृच्छिक प्रभाव को अनुकरण कर सकते हैं।
पहली चीज थी जो हमने क्षणिक रूप से निर्धारित की थी हमें वर्डप्रेस कोडेक्स पेज से कोड मिला है।
// हमारे क्षणिक डेटा की कोई भी मौजूदा कॉपी प्राप्त करें अगर (झूठी === ($ विशेष_स्यान_प्रतिफल = get_transient ('special_query_results'))) { // यह वहां नहीं था, इसलिए डेटा को पुनर्जन्म और क्षणिक बचाओ $ randargs = सरणी ('आदेश' => 'रैंड', 'नंबरपॉस्ट्स' => 20); $ विशेष_कुड़ी_संदर्भ = get_posts ($ randargs); set_transient ('special_query_results', $ विशेष_क्वेरी-परिणाम, 60 * 60 * 12); }
ध्यान दें कि 60 * 60 * 12 वह क्षेत्र है जहां आप कैश की लंबाई को नियंत्रित कर सकते हैं। आपको इसे जो भी पसंद है उसे बदलने के लिए स्वतंत्र महसूस करें अब अगर हम foreach लूप का उपयोग करते हुए $ विशेष_सर्जी_पहले दिखाते हैं, तो हमारे पास सभी 20 पोस्ट प्रदर्शित होंगे। इसलिए हमें यादृच्छिक पर 6 वस्तुओं को खींचने के लिए array_rand () फ़ंक्शन का उपयोग करने की आवश्यकता है। हमने इस तरह से कोड जोड़ा:
$ यादृच्छिक पदों = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6);
अब यह हमारे क्षणिक डेटा से बेतरतीब ढंग से 6 पोस्ट आईडी खींच देगा। हालांकि, यह प्रत्येक पोस्ट के लिए मान खींच नहीं करेगा तो हमें कोड के इस बिट को जोड़ना था:
$ 6posts [0] = $ बेतरतीब पोस्ट [$ रैंडकी [0]]; $ 6posts [1] = $ randomposts [$ रैंडकी [1]]; $ 6posts [2] = $ यादृच्छिक पोस्ट [$ रैंडकी [2]]; $ 6posts [3] = $ randomposts [$ रैंडकी [3]]; $ 6posts [4] = $ यादृच्छिक पोस्ट [$ रैंडकी [4]]; $ 6posts [5] = $ रैंडमपोस्ट [$ रैंडकी [5]];
असल में हमने $ sixposts के लिए एक सरणी बनाई है जिसमें हम उन वस्तुओं में से प्रत्येक के लिए मान प्रदान करते हैं। यह निश्चित नहीं है कि इसके बारे में जाने का यह सबसे अच्छा तरीका था, लेकिन यह काम किया। अगर आपके में से कोई भी बेहतर सुझाव है, तो उसे टिप्पणी में पोस्ट करने में संकोच न करें।
ऐसा करने के बाद, अब हम लूप को प्रदर्शित करने के लिए तैयार हैं। बस इस तरह से कोड डाल:
ग्लोबल $ पोस्ट; // यह काम करने के लिए आवश्यक है विदेशी मुद्रा ($ पोस्ट के रूप में $ 6posts): setup_postdata ($ post); // सभी आइटम यहां जाएं endforeach;
setup_postdata आप इस foreach पाश के अंदर सभी लूप टैग का उपयोग करने की अनुमति देता है जैसे कि_परमंकल आदि।
इसे सभी के लिए आसान बनाने के लिए, यहां अंतिम कोड है जो हमारे पास है:
'रैंड', 'नंबरपॉस्ट्स' => 20); $ विशेष_कुड़ी_संदर्भ = get_posts ($ randargs); set_transient ('special_query_results', $ विशेष_क्वेरी-परिणाम, 60 * 60 * 12); } // डेटा का उपयोग करें जैसे आप सामान्य रूप से करेंगे ... $ यादृच्छिक पदों = get_transient ('special_query_results'); $ randkey = array_rand ($ randomposts, 6); $ 6posts [0] = $ बेतरतीब पोस्ट [$ रैंडकी [0]]; $ 6posts [1] = $ randomposts [$ रैंडकी [1]]; $ 6posts [2] = $ यादृच्छिक पोस्ट [$ रैंडकी [2]]; $ 6posts [3] = $ randomposts [$ रैंडकी [3]]; $ 6posts [4] = $ यादृच्छिक पोस्ट [$ रैंडकी [4]]; $ 6posts [5] = $ रैंडमपोस्ट [$ रैंडकी [5]]; ग्लोबल $ पोस्ट; विदेशी मुद्रा ($ पोस्ट के रूप में $ 6posts): setup_postdata ($ post); ?>
अब, अब आप केवल 12 घंटे में एक बार यह डीबी क्वेरी बना रहे हैं, चाहे कितने उपयोगकर्ता आपकी साइट पर जा रहे हों।