एक पदानुक्रमित वर्गीकरण में शर्तें सम्मिलित करना


17

मैं वास्तव में कुछ शर्तें डालने के साथ कर रहा हूँ। यहाँ मेरा परिदृश्य है: मेरे पास एक वर्गीकरण है जिसे veda_release_type कहा जाता है:

//Release Type and Region
        $labels = array(
            'name'=> _x('Release Types/Regions', 'taxonomy general name' ),
            'singular_name' => _x('Release Type/Region', 'taxonomy singular name'),
            'search_items' => __('Search Release Types/Regions'),
            'popular_items' => __('Popular Release Types/Regions'),
            'all_items' => __('All Release Types/Regions'),
            'edit_item' => __('Edit Release Type/Regions'),
            'edit_item' => __('Edit Release Type/Region'),
            'update_item' => __('Update Release Type/Region'),
            'add_new_item' => __('Add New Release Type/Region'),
            'new_item_name' => __('New Release Type/Region Name'),
            'separate_items_with_commas' => __('Seperate Release Types/Regions with Commas'),
            'add_or_remove_items' => __('Add or Remove Release Types/Regions'),
            'choose_from_most_used' => __('Choose from Most Used Release Types/Regions')
        );
        $args = array( 
            'hierarchical' =>true,  
            'labels' => $labels,  
            'query_var' => true,  
            'rewrite' => array('slug' =>'release_type')     
        );
        register_taxonomy('veda_release_type', 'veda_release',$args);

यह स्पष्ट रूप से श्रेणीबद्ध है। शीर्ष स्तर में रिलीज के प्रकार यानी डीवीडी, ब्लू-रे शामिल हैं। उस स्तर के अंतर्गत क्षेत्र हैं अर्थात। क्षेत्र 1, क्षेत्र 2, आदि। इसलिए, पदानुक्रम जो मुझे चाहिए: डीवीडी - रीज़न 0 - रीज़न 1 - रीज़न 2 - रीज़न 3 - रीज़न 4 - रीज़न 5 - रीज़न 6 ब्लू-रे - -रेजियन ए - मार्गियन बी - मार्गियन C

मैंने अपनी कक्षा में insert_term नामक एक फ़ंक्शन बनाया, ताकि यह पता लगाया जा सके कि कोई शब्द मौजूद है या नहीं, तो इसे डालें:

public function insert_term ($term, $taxonomy, $args = array()) {
        if (isset($args['parent'])) {
            $parent = $args['parent'];
        } else {
            $parent = 0;
        }
        $result = term_exists($term, $taxonomy, $parent);
        if ($result == false || $result == 0) {
            return wp_insert_term($term, $taxonomy, $args);             
        } else {
            return (array) $result;
        }       
}

और फिर मैंने कहा कि फ़ंक्शन को शब्दों को सम्मिलित करने के लिए कहा जाता है:

    $dvd = $this->insert_term('DVD','veda_release_type');
    $this->insert_term('Region 0','veda_release_type',array('parent'=>$dvd['term_id']));
    $this->insert_term('Region 1','veda_release_type',array('parent'=>$dvd['term_id']));
    $this->insert_term('Region 2','veda_release_type',array('parent'=>$dvd['term_id']));
    $this->insert_term('Region 3','veda_release_type',array('parent'=>$dvd['term_id']));
    $this->insert_term('Region 4','veda_release_type',array('parent'=>$dvd['term_id']));
    $this->insert_term('Region 5','veda_release_type',array('parent'=>$dvd['term_id']));
    $this->insert_term('Region 6','veda_release_type',array('parent'=>$dvd['term_id']));

    $bd = $this->insert_term('Blu-Ray', 'veda_release_type');
    $this->insert_term('Region A','veda_release_type',array('parent'=>$bd['term_id']));
    $this->insert_term('Region B','veda_release_type',array('parent'=>$bd['term_id']));
    $this->insert_term('Region C','veda_release_type',array('parent'=>$bd['term_id']));

मुझे जो समस्या हो रही है, वह यह है कि भले ही शब्द डेटाबेस में इनपुट किए गए हों, लेकिन वे टैक्सोनॉमी पेज पर दिखाई नहीं देते हैं। सबसे ऊपर, शीर्ष स्तर की शर्तें दिखाई देती हैं। मुझे विभिन्न चीजों को आजमाना होगा जब तक कि यह वर्डप्रेस को उपजी शब्दों को पहचानने के लिए मजबूर न करे। क्या किसी ने इसमें भाग लिया है या बेहतर तरीके से सिफारिश कर सकता है?

संपादित करें: कुछ और ध्यान दिया: मैंने डेटाबेस से शर्तों को हटाने की कोशिश की और फिर शर्तों को घोषित करने वाले प्लगइन को निष्क्रिय और पुन: सक्रिय किया। मूल पृष्ठ में दो मूल शब्द दिखाए गए हैं, लेकिन बच्चे की शर्तें नहीं हैं। बच्चे की शर्तें "पैरेंट" ड्रॉप डाउन मेनू में दिखाई देती हैं जहां आप एक नया शब्द बनाना चाहते हैं। जब मैं एक शब्द जोड़ता हूं, जिसके माता-पिता बच्चे की शर्तों में से एक हैं और पृष्ठ को ताज़ा करते हैं, तो बच्चे की शर्तों को दिखाते हैं। यहां छवि विवरण दर्ज करें


कुछ शोध करने के बाद, ऐसा लगता है कि यह शर्तों कैश के साथ कुछ करना पड़ सकता है। सुनिश्चित नहीं है कि क्या या कैसे मैं अपडेट प्राप्त करने के लिए सुसंगत आधार पर कैश को साफ कर सकता हूं या नहीं।
मैन्नी फ्लेममंड

जवाबों:


25

पदानुक्रम कैश किया गया है और इसे ठीक से अमान्य नहीं किया गया है। यह एक बग है, जो अभी भी WP 3.1 के रूप में अनसुलझा है।

वर्कअराउंड delete_option("{$taxonomy}_children");सीधे कॉल करना होगा ।

_Get_term_hierarchy () फ़ंक्शन देखें।


मुझे लग रहा था कि यह एक कैशिंग मुद्दा है। क्या मुझे प्रत्येक बच्चे को डालने से पहले या बाद में यह सम्मिलित करना चाहिए?
मैन्नी फ्लेरमंड

2
एक अतिरिक्त रिफ्रेश लेता है, लेकिन सभी चाइल्ड टर्म्स डालने के बाद delete_option कोड डालकर ट्रिक करता है। धन्यवाद, scribu। यह मेरे द्वारा दिए गए रेप पॉइंट्स के लायक था। उम्मीद है कि यह दूसरों को इसी तरह की समस्याओं में मदद करता है
मैन्नी फ्लेरमंड

धन्यवाद! मैंने इस पर सिर्फ 4 घंटे बिताए। जैसे ही मुझे व्यवस्थापक GUI के माध्यम से एक शब्द जोड़ने से पहले और बाद में db का एक अंतर करने का विचार आया, मैंने विकल्प देखा और पता था कि Google को यहां क्या करना है।
प्रति विकलैंडर

6

मेरे 2 सेंट - मैं WooCommerce प्लगइन के लिए एक एक्सटेंशन का निर्माण कर रहा हूं जो एक अपलोड किए गए CSV फ़ाइल के माध्यम से कैटलॉग श्रेणी / उत्पाद प्रबंधन की अनुमति देता है। श्रेणियां बनाते समय मैं इसी मुद्दे में भाग गया। कैश्ड WooCommerce श्रेणियों को साफ़ करने का उपाय delete_option("product_cat_children");पाश के बाद कॉल करना था जो श्रेणियों और उप-श्रेणियों को बनाता है। मनाइए कि यह किसी और के लिए सहायक हो!


2

आप संभवतः एक वस्तु वापस प्राप्त कर सकते हैं term_exists($term, $taxonomy, $parent)यदि टैक्सोनॉमी सेट होने पर कहा जाता है। यह आपके द्वारा पोस्ट किए गए नमूना कोड में सेट है, इसलिए मुझे लगता है कि यह मुद्दा है।

आपके आवेषण स्टेटमेंट एक सरणी की उम्मीद कर रहे हैं जब वे कुंजी संदर्भ देते हैं।

उदाहरण के लिए।

$bd['term_id']
$dvd['term_id']

.. लेकिन हो सकता है कि आपको वास्तव में कोई वस्तु वापस मिल रही हो term_exists

यह निर्धारित करने का एक त्वरित तरीका है कि इस लाइन को अपडेट करने के लिए समस्या क्या है।

return $result;

सेवा..

return is_object( $result ) ? (array) $result : $result;

अगर मैं सही हूं और यही समस्या है, तो इसे ठीक करना चाहिए, हालांकि मैं इसे एक सुरुचिपूर्ण समाधान नहीं कहूंगा।

उम्मीद है कि आप के लिए देख रहे थे जवाब / मदद .. :)


देर से उत्तर के लिए क्षमा करें। इसे पकड़ने के लिए धन्यवाद, लेकिन मुझे नहीं लगता कि मेरे पास जो समस्या थी, उसका समाधान हो गया है।
मैन्नी फ्लेममंड

1

धन्यवाद। इस सवाल से बहुत मदद मिली। मैं यूनिट परीक्षणों से जूझ रहा था और मैंने पाया कि मुझे करना था

delete_option('veda_release_type');
wp_cache_flush();

मेरी शीर्ष स्तरीय श्रेणियों को जोड़ने के बाद, और फिर दूसरे स्तर की श्रेणियों को जोड़ने के बाद फिर से वर्डप्रेस को सब कुछ स्पष्ट करने और यूनिट परीक्षणों को पारित करने की अनुमति दें। यह "दूसरे पृष्ठ लोड / अतिरिक्त ताज़ा" की आवश्यकता के आसपास काम करता है जिसे यहां एक अन्य उत्तर में संदर्भित किया गया है।


1

मेरा समाधान:

(शायद यह कैश रिकॉर्ड को साफ करने के लिए आवश्यक था ..)

$PARENT_CAT= wp_insert_term('Parent_category_NAME','category',  array('slug'=> 'Parent_category_NAME'));
delete_option("category_children");
wp_cache_flush();

    $child= wp_insert_term('children_category_NAME','category',array( 'slug'=>'children_category_NAME', 'parent' =>$PARENT_CAT['term_id']));
    delete_option("category_children");
    wp_cache_flush();

कृपया अपना उत्तर बताएं और साथ ही कोड भी पोस्ट करें।
s_ha_dum

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