问题描述

我真的有几个插入术语的问题。这是我的场景:我有一个名为 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。