自定义分类关系(例如:植物分类)

时间:2013-04-07 作者:Christian

我正在尝试将plant classification实现为自定义post类型的自定义分类法。

目前,植物分类应分为三个层次:Family, Genus, Species.

在我看来,有两种可能的方法:

  1. Using taxonomy level as an indicator of taxonomy type, ex:

    plant_class                (custom taxonomy)
      \'-- Rhamnaceae           (level 1 = family)
        \'-- Ziziphus           (level 2 = genus)
          \'-- Ziziphus Jujuba  (level 3 = species)
    
    优势:

    结构正确;我可以找到一个特定属的姓氏

    以后不能扩展(例如引入亚种)

  2. 对我来说,每级方面看起来太“神奇”(对初学者来说不直观/令人困惑)
  3. Putting each name under the classification type itself, ex:

    plant_class              (custom taxonomy)
     |-- Family               (group of families)
     | \'-- Rhamnaceae
     |-- Genus                (group of geni)
     | \'-- Ziziphus
     \'-- Species              (group of species)
       \'-- Ziziphus Jujuba
    
    优势:

    易于扩展(添加亚种或更高级别的订单)

    • 缺点

      当与植物(如科、属和种)关联时,管理员需要选择所有适用的分类部分。按编程方式,我无法从属中找到科(破坏的层次结构)

我的另一个想法是创建多个分类法(plant_family, plant_genus, plant_species) 并以某种方式在每个分类类型之间形成一种关系,以便一个家族可以与多个geni相关联。我不知道这是怎么回事。

想知道为什么没有代码?嗯,创建自定义分类法相对容易,而我缺少的纯粹是一个系统设计问题。

Ref: Biological Classification | Wordpress Taxonomy Reference | Ziziphus :)

3 个回复
SO网友:helgatheviking

为什么不使用层次分类法?我想不出比你所描述的更好地使用层次结构了。就您所感知的劣势而言:

当与植物(例如:科、属和种)关联时,管理员需要选择所有适用的分类部分

Rhamnaceae
- Ziziphus
-- Ziziphus Jujuba
如果你检查Ziziphus Jujuba 然后,该工厂岗位自动处于Ziziphus 组,并自动在Rhamnaceae

从程序上讲,我失去了从属中寻找家族的能力

您始终可以通过检查术语的父项来追踪术语“上树”。get_term() 返回具有属性的对象parent 这是0 当它是顶级术语时,如果不是,则为其父项的ID号。

例如,假设您所在的工厂岗位在Ziziphus Jujuba

// get all the terms for a particular post
$plant_terms = wp_get_post_terms( get_the_ID(), \'plant_class\' );

//assuming there are terms to loop through
if( $plant_terms && !is_wp_error($plant_terms)) {

    //lets pop off the first term (shouldn\'t there be only one?)
    $plant_term = array_shift($plant_terms);

    //check that term\'s parent ID and follow it upwards
    //when you get to a top-level term $plant_term->parent = 0
    //so the loop will break
    while ( $plant_term->parent > 0 ){
        $plant_term = get_term( $plant_term->parent );
    }

    //this should echo the family name
    echo $plant_term->name;

}
我想你能做到while 循环更复杂,可能有一个计数器,以了解您何时处于哪个级别。

我看到的潜在陷阱是

仅将输入限制在第三个“物种”级别。我的Radio Buttons for Taxonomies plugin 可以帮助您将输入限制为单一输入,但不会强制它成为“物种”级别。(FWIW-它需要更新以修复添加术语的错误,但我正在努力)。虽然也许你可以使用我的插件并使用一点jQuery来限制输入

SO网友:fuxia

将层次结构创建为层次结构自定义帖子类型hierarchy, 并根据需要创建分类结构。

然后使用Posts 2 Posts plugin 映射每个plant 到中的一个或多个项目hierarchy.

SO网友:Christian

由于我已经有了植物详细信息的自定义分类法,因此我的结构将是这样的:

 Plant Details (custom taxonomy)
   |- Class Ranks                      classification ranks
   | |- Family               <-.
   | |- Genus                <-|-.
   | \'- Species              <-|-|-.
   |- Plant Classes            | | |   plant classification
   | \'- Rhamnaceae           --\' | |
   |   \'- Ziziphus           ----\' |
   |     \'- Ziziphus Jujuba  ------\'
   \'- Plant Types                      other plant details...
     |- Cactus
     |- Herb
     \'- Tree

这是我的建议答案,感谢@s\\u ha\\u dum的意见

结束

相关推荐

rewrite rules hierarchical

我希望我的WordPress遵循以下规则:/productes/ 包含所有产品的页面/productes/[category]/ 包含该类别所有产品的分类页面/productes/[category]/[subcategory]/ 包含该类别所有产品(与2相同)的分类页面/[productes]/[category]/[product]/ A.single-productes.php 将显示类别产品/[productes]/[category]/[subcategory]/[product]/ A.sin