क्या मुझे प्लगइन विकास के लिए कस्टम पोस्ट प्रकार या कस्टम डेटाबेस तालिकाओं का उपयोग करना चाहिए?


38

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

मैं एक बहुत बड़े वेब ऐप में भारी रूप से वर्डप्रेस का विस्तार करने जा रहा हूं और अपने डेटा स्ट्रक्चर्स को मूल रूप से यथासंभव वर्डप्रेस फ्रेमवर्क पर भरोसा करना चाहता हूं, लेकिन मुझे नहीं पता कि क्या यह बेहतर है कि मैं अपना कस्टम डेटाबेस टेबल बना सकूं या कस्टम पोस्ट प्रकारों का उपयोग करने का प्रयास करें।

मुझे अभी तक अपने सभी डेटा का पता नहीं है, लेकिन रिलेशनलली लिंक किए गए कई टेबल (या कॉप्स) होंगे। मुझे अपने शोध से "वाइब" मिलता है कि मुझे कस्टम डेटाबेस तालिकाओं से बचना चाहिए, लेकिन मुझे यकीन नहीं है कि सबसे अच्छा समाधान कैसे निर्धारित किया जाए।

विशेष रूप से मैं तीन क्षेत्रों के बारे में चिंतित हूँ:

  • अगर मैं उस मार्ग पर जाऊं तो मुझे अपने अतिरिक्त क्षेत्रों के लिए पोस्ट मेटाफ़िल्ड की आवश्यकता होगी, और अगर वह चीज़ों को मुश्किल बना देगा "
  • मैं रिपोर्ट के लिए सेमी कॉम्प्लेक्स रिलेशनल फिल्टर का उपयोग करके प्रश्नों को कितनी अच्छी तरह से वापस पा सकता हूं
  • रिश्तों को सबसे अच्छा कैसे प्रबंधित करें, खासकर अगर मेरे कई रिश्ते हैं

क्या कोई "सही" तरीका है? आपके सहयोग के लिए धन्यवाद।

जवाबों:


59

आपको किसी को भी संदेह होना चाहिए जो कहता है कि एक एकल "सही" तरीका है। सही तरीका स्थिति पर निर्भर करता है। CPT अवसंरचना का उपयोग करने के कई उल्लेखनीय लाभ हैं:

  • आपको मुफ्त में डैशबोर्ड यूआई मिलता है
  • आप स्वचालित रूप से किसी भी लगातार कैश प्लग इन सहित WP के कैशिंग का लाभ उठाते हैं, जो कि इंस्टॉलेशन का उपयोग कर सकते हैं
  • आपको स्वचालित रूप से पोस्ट रिवीजन जैसे उपहार मिलते हैं
  • आप WP_Queryकक्षा तक पहुँचते हैं , जिसका अर्थ है कि, सिद्धांत रूप में, आपको कोई भी (या कम से कम बहुत अधिक) संभावना-से-छोटी गाड़ी और कमजोर-अक्षम SQL लिखने की ज़रूरत नहीं है
  • यदि आप प्लगइन वितरित करने या इसे ओपन-सोर्स विकास के लिए खोलने की योजना बना रहे हैं, तो आप पा सकते हैं कि डेवलपर्स कस्टम पोस्ट प्रकारों और अपने स्वयं के कस्टम सामान की तुलना में संबद्ध एपीआई कार्यों का उपयोग करके अधिक आरामदायक हैं।

CPT API के साथ समस्याएं ज्यादातर इस तथ्य से उपजी हैं कि यह 'पदों' के रूपक से अत्यधिक विवाहित है, और उस डेटा प्रकार के सभी पहलू जो रूपक के साथ आते हैं। MySQL कमांड लाइन से, रन करें DESCRIBE wp_posts। WP मानता है कि आपकी सामग्री का एक शीर्षक है, कि इसमें एक (एकल) लेखक है, जिसे आपको केवल बनाई गई तारीख और अंतिम-संपादित तारीख का ट्रैक रखने की आवश्यकता है, जिसे आपको एक अनइंडैक्स के लिए स्थान की आवश्यकता होगी post_content, आदि। यह काम करता है अच्छी तरह से सामग्री के कुछ प्रकार के लिए, लेकिन दूसरों के लिए जरूरी नहीं है। आप पहले से ही कुछ संभावित समस्याओं की दिशा में इशारा कर चुके हैं:

अगर मैं उस मार्ग पर जाऊं तो मुझे अपने अतिरिक्त क्षेत्रों के लिए पोस्ट मेटाफ़िल्ड की आवश्यकता होगी, और अगर वह चीज़ों को मुश्किल बना देगा "

wp_postsCPT API के माध्यम से स्कीमा को बढ़ाने के दो तरीके हैं : पोस्टमेटा और टैक्सोनॉमी। पोस्टमेटा बिना चाबी के मूल्य के जोड़े हैं, जो विविध डेटा का एक गुच्छा संग्रहीत करने के लिए बहुत अच्छा है, लेकिन जटिल लुकअप करने के लिए बिल्कुल भी अनुकूलित नहीं है। इस संबंध में टैक्सोनॉमी कुछ अधिक लचीली हैं, लेकिन यदि आपके पास बहुत जटिल लुकअप हैं, तो आप अभी भी संभावित रूप से महंगी उप-श्रेणियों का सामना करेंगे। ( meta_queryऔर tax_queryतर्क और उनके क्वेरी कंस्ट्रक्टर वर्ग बहुत अच्छे और आसान हैं, हालांकि)

हैं, तो आप का सुझाव के रूप में, आप केवल "अर्द्ध जटिल रिलेशनल फिल्टर" कभी-कभी रिपोर्ट के मामले में इस प्रकार की क्या करने की जरूरत है, तो इस वास्तुकला शायद आप के लिए ठीक है। यह तब होता है जब आप उपयोगकर्ताओं को फ़िल्टर दिखाना शुरू करते हैं, ताकि आपको हर समय कई जटिल JOINएस और सबक्वेरीज़ चलाने पड़ें, जिससे चीजें जल्दी से हाथ से निकल जाएं।

रिश्तों को सबसे अच्छा कैसे प्रबंधित करें, खासकर अगर मेरे कई रिश्ते हैं

कई-कई रिश्ते WP देव समुदाय में एक लंबे समय से चिपके बिंदु हैं (देखें https://core.trac.wordpress.org/ticket/14513 )। आप post_ids पर टैक्सोनॉमी आइटम मैप करके कस्टम टेबल का उपयोग किए बिना इसे नकली कर सकते हैं (ताकि, उदाहरण के लिए, आप यह कह सकते हैं कि 'P3 का संबंध Y से P5' है यह कहकर कि P3 का टैग 'Y-P3' है) लेकिन भ्रमित हो जाता है (और अक्षम) बहुत जल्दी। आप अपनी खुद की रिलेशनशिप टेबल बनाने पर भी विचार कर सकते हैं जो सीपीटी से जुड़ती है - फिर भी आपको सीपीटी का लाभ मिलेगा, और केवल एक ही डीबी टेबल बनाया जा सकता है। इस पद्धति के एक अच्छी तरह से निष्पादित संस्करण के लिए, पोस्ट 2 पोस्ट प्लगइन देखें: https://wordpress.org/extend/plugins/posts-to-posts/

तो, अंत में, आपको इसके आधार पर निर्णय लेना चाहिए:

  • जिस तरह के डेटा आप स्टोर कर रहे हैं - वे "पोस्ट" y कैसे हैं
  • जिन प्रकार के प्रश्नों की आवश्यकता होगी - वे कितने जटिल होंगे
  • वेतनमान - आपका वांछित स्कीमा कितना जटिल है, आपके पास कुल कितनी वस्तुएं होंगी और आप कितने उपयोगकर्ताओं का अनुमान लगाते हैं

यदि उत्तर हैं: बहुत पोस्टी, बहुत जटिल नहीं है, और सुपर-विशाल पैमाने पर नहीं है, तो सीपीटी के साथ जाएं। अन्यथा अपनी खुद की तालिकाओं पर विचार करें।


3
बहुत बढ़िया सारांश।
JCL1178

1
वह दोगुना। उत्तर दिया गया +1
kaiser

वाह, बहुत बढ़िया जवाब, धन्यवाद! बहुत ही ज्ञानवर्धक और अच्छी तरह से समझाया गया है, जिसमें बहुत ही सारगर्भित सारांश है। मुझे लगता है कि इससे मुझे वह दिशा मिल रही है जिसकी मुझे जरूरत है। हो सकता है कि मैं अपनी कुछ वस्तुओं को और दूसरों को कस्टम बना सकता हूं। मैं पोस्ट 2 पोस्ट शैली संबंध तालिका पर विचार कर रहा था ताकि दोनों दुनिया का सर्वश्रेष्ठ प्राप्त कर सकें। और आप meta_queryarg पर टिप बहुत अच्छा है!
जेफ

2
अगर आप कस्टम टेबल पर विचार कर रहे हैं तो पिपिन विलियमसन की यह श्रृंखला निश्चित रूप से पढ़ने लायक है: pippinsplugins.com/series/building-a-database-abstraction-layer
ट्रैविस नॉर्थकट्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.