इस मुद्दे पर कुछ विचार दिए गए हैं, लेकिन कृपया ध्यान दें कि यह कोई निर्णायक जवाब नहीं है क्योंकि कुछ चीजें हो सकती हैं जिनकी मैंने अनदेखी की है, लेकिन यह आपको संभावित गोचरों को एक अंतर्दृष्टि देनी चाहिए।
हां, तकनीकी रूप से इसके परिणाम हो सकते हैं।
जहां कॉलिंग wp_defer_term_counting(true)
वास्तव में फायदेमंद हो जाती है, उदाहरण के लिए जब आप पदों के डेटाबेस में एक बड़े पैमाने पर सम्मिलन कर रहे हैं और प्रक्रिया के हिस्से के रूप में प्रत्येक ऑब्जेक्ट को शर्तें सौंपी जाती हैं।
ऐसे मामले में आप निम्न कार्य करेंगे:
wp_defer_term_counting(true); //defer counting terms
//mass insertion or posts and assignment of terms here
wp_defer_term_counting(false); //count terms after completing business logic
अब आपके मामले में, यदि आप एक समय में केवल एक ही पोस्ट डाल रहे हैं, तो टर्म काउंटिंग समाप्त हो जाएगी, फिर भी wp_defer_term_counting(false)
आपके ऑपरेशन के बाद आपको कॉल न करने से लाभ होगा, और यदि आप पर भरोसा करते हैं, तो आप और या अन्य पक्षों को बाध्य कर सकते हैं। किसी अन्य तर्क / प्रसंस्करण, सशर्त या अन्यथा के लिए शब्द गणना।
आगे समझाने के लिए, आप कहते हैं कि आप निम्नलिखित कार्य करते हैं:
मान लें कि हमारे पास एक टैक्सोनॉमी नामक 3 शब्द हैं product_cat
, उन शर्तों के लिए आईडी क्रमशः 1 (शब्द का नाम ए), 2 (शब्द का नाम बी) और 3 (शब्द का नाम सी) है।
उपरोक्त शर्तों में से प्रत्येक में पहले से ही 5
(उदाहरण के लिए) की एक शब्द गणना है ।
फिर ऐसा होता है ...
wp_defer_term_counting(true); //defer counting terms
$post_id = wp_insert_post($data);
wp_set_object_terms($post_id, array(1, 2, 3), 'product_cat');
फिर बाद में आपके तर्क में आप शब्द लाने का फैसला करते हैं क्योंकि आप उस शब्द से जुड़ी वस्तुओं की मात्रा का आकलन करना चाहते हैं और परिणाम के आधार पर कुछ अन्य कार्रवाई करते हैं।
तो आप ऐसा करें ...
$terms = get_the_terms($post_id, 'product_cat');
//let's just grab the first term object off the array of returned results
//for the sake of this example $terms[0] relates to term_id 1 (A)
echo $terms[0]->count; //result 5
//dump output of $terms above
array (
0 =>
WP_Term::__set_state(array(
'term_id' => 1,
'name' => 'A',
'slug' => 'a',
'term_group' => 0,
'term_taxonomy_id' => 1,
'taxonomy' => 'product_cat',
'description' => '',
'parent' => 0,
'count' => 5, //notice term count still equal to 5 instead of 6
'filter' => 'raw',
)),
)
हमारे उदाहरण के मामले में, हमने कहा कि नाम A (term_id 1) में पहले से ही 5 ऑब्जेक्ट्स जुड़े हुए हैं, दूसरे पासवर्ड में पहले से ही 5 की एक टर्म काउंट है।
इसलिए हम count
उपरोक्त ऑब्जेक्ट पर पैरामीटर को 6 होने की उम्मीद करेंगे, लेकिन क्योंकि आपने wp_defer_term_counting(false)
अपने ऑपरेशन के बाद कॉल नहीं किया था , तो लागू शब्द टर्म ए (बी या सी) के लिए अपडेट नहीं किए गए थे।
इसलिए यह आपके ऑपरेशन के बाद कॉल किए बिना कॉल करने का परिणाम है ।wp_defer_term_counting(true)
wp_defer_term_counting(false)
अब सवाल यह है कि क्या इसका प्रभाव आप पर पड़ता है? क्या होगा यदि आपको कॉल करने get_the_terms
या कुछ कार्रवाई करने की आवश्यकता नहीं है जो उस शब्द को पुनर्प्राप्त करता है जहां आप count
कुछ अन्य ऑपरेशन करने के लिए मूल्य का उपयोग करते हैं? वैसे उस मामले में महान, आपके लिए कोई समस्या नहीं है ।
लेकिन ... क्या होगा अगर किसी और को फ़ंक्शन set_object_terms
में कार्रवाई पर आदी किया जाता है wp_set_object_terms()
और वे टर्म काउंट सही होने पर भरोसा कर रहे हैं? अब आप देखें कि परिणाम कहां से उत्पन्न हो सकते हैं।
या क्या होगा यदि अनुरोध समाप्त होने के बाद, एक अन्य अनुरोध किया जाता है जो एक वर्गीकरण अवधि को पुनः प्राप्त करता है और count
संपत्ति का उपयोग अपने व्यापार तर्क में करता है? यह एक समस्या हो सकती है।
हालांकि यह बहुत दूर तक लग सकता है कि count
मूल्यों को बहुत नुकसान हो सकता है, हम यह नहीं मान सकते हैं कि इस तरह के डेटा का उपयोग हमारे अपने दर्शन के आधार पर किया जाएगा।
जैसा कि वैकल्पिक उत्तर में उल्लेख किया गया है, टैक्सोनॉमी सूची तालिका में देखी गई गणना को भी अपडेट नहीं किया जाएगा।
वास्तव में आप टर्म काउंटिंग को स्थगित करने के बाद टर्म काउंट को अपडेट करने का एकमात्र तरीका है और आपका अनुरोध समाप्त हो गया है, wp_update_term_count($terms, $taxonomy)
तब तक मैन्युअल रूप से कॉल या प्रतीक्षा करें जब तक कि कोई व्यक्ति टैक्सोनोमी यूआई या प्रोग्राम के माध्यम से दिए गए टैक्सोनॉमी के लिए कोई शब्द नहीं जोड़ता है।
सोच के लिए भोजन।