問題描述

我真的有幾個插入術語的問題。這是我的場景:我有一個名為 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);

這顯然是徒勞的。頂級包含發行型別 ieDVD,blu-ray 。那裡的水平是區域 1,區域 2 等。所以,我想要的層次是:DVD – 區域 0 – 區域 1 – 區域 2 – 區域 3 – 區域 4 – 區域 5 – 區域 6 Blu-Ray – 區域 A – 區域 B – 區域 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']));

我遇到的問題是即使在資料庫中輸入了這些術語,它們也不會顯示在分類頁面上。最多的是頂級術語。我必須嘗試各種各樣的事情,直到排序強制 WordPress 識別子級詞。有沒有人碰到這個或者可以推薦一個更好的方法?

編輯:注意到別的:我嘗試刪除資料庫中的術語,然後停用並重新啟用宣告條款的外掛。兩個父項都顯示在術語頁面中,但是子項沒有顯示。小孩條款將顯示在您要建立新術語的”Parent” 下拉選單中。當我新增一個父母是孩子條款之一併重新整理該頁面的術語時,那麼孩子條目就會顯示出來。

最佳解決方案

層次結構被快取,它沒有正確地失效。這是一個錯誤,仍然沒有解決 WP 3.1 。

解決辦法是直接呼叫 delete_option("{$taxonomy}_children");

參見 _get_term_hierarchy() 功能。

次佳解決方案

我的 2 美分 – 我正在為 WooCommerce 外掛建立一個擴充套件,允許透過上傳的 CSV 檔案進行目錄類別/產品管理。在生成類別時遇到同樣的問題。清除快取的 WooCommerce 類別的解決方案是在建立類別和 sub-categories 的迴圈後呼叫 delete_option("product_cat_children"); 。希望這有助於別人!

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。