একটি শ্রেণিবদ্ধ ট্যাক্সনোমিতে শর্তাদি .োকানো


17

শর্তাবলী সন্নিবেশ নিয়ে আমার সত্যিই কিছু সমস্যা হচ্ছে। এখানে আমার দৃশ্যটি: আমার বেদে_রেইল_ টাইপ নামে একটি সংজ্ঞা আছে:

//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 ব্লু-রে - - অঞ্চল এ - অঞ্চল বি - অঞ্চল সি

আমি আমার ক্লাসে ইনসার্ট_টারম নামে একটি ফাংশন তৈরি করেছি যা পরীক্ষা করার জন্য একটি শব্দ আছে কিনা তা প্রবেশ করুন কিনা:

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

শ্রেণিবিন্যাস ক্যাশে করা হয়েছে এবং এটি সঠিকভাবে অবৈধ নয়। এটি একটি বাগ, এখনও ডব্লিউপি ৩.১-এর সমাধান না করে।

একটি কর্মসূচী delete_option("{$taxonomy}_children");সরাসরি কল করা হবে।

_Get_term_hierarchy () ফাংশনটি দেখুন।


আমার মনে হয়েছিল এটি ক্যাচিংয়ের সমস্যা। আমি প্রতিটি বাচ্চা sertোকানোর আগে বা পরে এটি inোকানো উচিত?
ম্যানি ফ্লুরমন্ড

2
একটি অতিরিক্ত রিফ্রেশ নেয় তবে সন্তানের সমস্ত পদ সন্নিবেশ করানোর পরে মুছুন_পশন কোড স্থাপন করা কৌশলটি করে। ধন্যবাদ, স্ক্রিবু আমি যে রেপ পয়েন্টগুলি দিয়েছিলাম তা ভালই ছিল। আশা করি এটি অন্যদেরকে একই ধরণের সমস্যায় সহায়তা করে
ম্যানি ফ্লারমন্ড

ধন্যবাদ! আমি এই উপর 4 ঘন্টা ব্যয়। অ্যাডমিন জিইউআইয়ের মাধ্যমে একটি শব্দ যুক্ত করার আগে এবং পরে ডিবি-র একটি পৃথক করার ধারণাটি আসার সাথে সাথে আমি বিকল্পটি দেখেছি এবং গুগলকে এখানে আসতে কী হবে তা আমি জানি।
প্রতি উইকল্যান্ডে

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();

আমার শীর্ষ স্তরের বিভাগগুলি যুক্ত করার পরে এবং তারপরে দ্বিতীয় স্তরের বিভাগ যুক্ত করার পরে ওয়ার্ডপ্রেসকে সমস্ত কিছু সাফ করার অনুমতি দেয় এবং ইউনিট পরীক্ষাগুলি পাস হতে দেয় again এটি এখানে অন্য উত্তরে উল্লেখ করা "দ্বিতীয় পৃষ্ঠার লোড / অতিরিক্ত রিফ্রেশ" এর প্রয়োজনীয়তার জন্য কাজ করে।


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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.