[转载]wordpress分类方法体系Taxonomy的初步探讨_乌徒帮.
在wordpress中,我们很很奇怪的是,它的分类和我们理解中的分类存在一定的偏颇。我们理解中的分类只是简单的对文章内容的分类,而在 wordpress中,这种分类仅仅被定义为栏目、分类目录,而除此之外,wordpress存在一个我们不是很理解的“分类法”的概念,当然,如果简单 的从字面理解很简单,即按照一定的方法进行分类,可是用到程序中应该如何表达呢?Taxonomy便是wordpress的逻辑处理。
如果你进行wordpress插件开发,在调用数据库时,会非常奇特的和怪异的去琢磨wordpress的分类数据表,不熟练的开发者根本摸不清楚wordpress的文章分类如何进行数据管理。那么本文就对wordpress的Taxonomy分类方法进行初步的讲解。
一、wordpress中分类逻辑的探讨
我们在调用一些wordpress的分类函数时,经常会出现一个单词:term。没错,这个单词反映在数据库中会涉及到三张数据 表:wp_terms、wp_term_relationships、wp_term_taxonomy,它们保存了wordpress中所有分类的信 息,包括:文章分类、文章形式分类、标签分类、链接分类、其他分类等等,反映为英文即:category、post_format、post_tag、 link_category、nav_menu等,可在wp_term_taxonomy表的taxonomy字段看到。
wordpress的分类方法Taxonomy:wordpress中将系统中出现的分类进行归类,某一分类属于什么类型的分类,即Taxonomy。例如,标签“乌徒帮”下有很多文章,属于一个分类,它是按照“post_tag”的分类法进行分类的。
wordpress的分类体系:wordpress中的分类按照category、post_format、post_tag、link_category、nav_menu等方法进行分类。
wordpress分类体系在数据库中:wp_terms保存分类的名称、别名(包括分类法,如post-fomat- aside);wp_term_taxonomy保存的是分类法下分类的关系,包括分类关系ID,分类的ID,分类法taxonomy,和分类的 parent分类ID值,分类关系IDterm_taxonomy_id将在wp_term_relationships中被引用,此外,该表还保存了该 分类的描述description和分类下的文章数目count;wp_term_relationships表保存着文章和分类关系 term_taxonomy之间的关系,包括文章ID,term_taxonomy_id。
二、wordpress中分类法体系在数据库中是如何实现的
我们通过一个实例来看看数据表中这些数据内容之间的关系。
在wordpress中,如果你需要获取一个具体的分类,例如获取栏目“乌徒帮闲语”,首先根据文章ID在 wp_term_relationships表中获取term_taxonomy_id值,再在wp_term_taxonomy表中获取分类的 term_id和parent值等信息,最后再根据term_id在wp_terms获取分类的名称和别名,根据parent值在wp_terms中获取 父分类的名称和别名。这三个表的关系大抵如此,你也可以倒过来,根据分类的别名从wp_terms中获取term_id,再到 wp_term_taxonomy中获取它的描述和父分类ID,再返回wp_terms中获取父分类的别名和名称。
通过这样的举例,你就可以了解wordpress中分类方法体系的大致逻辑了。
我们再通过一个实例来看一下分类方法体系:
我们在写一篇文章时,插入一个新的标签或分类,以标签为例,首先,在表wp_terms中,创建一条记录,记录下标签的名称,返回term_id 值;然后在wp_term_taxonomy中创建一条记录,用到了该term_id,taxonomy字段的值为post_tag,由于是标签,其他字 段暂时无法补充,返回term_taxonomy_id;最后利用该term_taxonomy_id值,在wp_term_relationships 表中创建一条新的记录,把文章的ID值和该term_taxonomy_id值作为两个字段内容。
三、wordpress中有关分类法体系的函数有哪些
否子戈无法完全列出这些函数,如果你是开发者,可以直接看源码:/wp-includes/taxonomy.php、/wp-admin /includes/taxonomy.php中的函数,前者在wordpress主题中使用,后者在后台设计中使用,如果要在主题中使用需要 include_once进来。通过它们,你可以实现很多插入、删除、修改某一分类的功能。
wordpress中的category函数,你可以看源码/wp-includes/category.php、/wp-includes /category-template.php等文件中的函数,或参考wordpress开发文档。另外,在post.php等文件中也有几个相关的函 数,如wp_get_object_terms、wp_set_object_terms()、wp_set_post_terms()等函数将会在插件中用到。
否子戈只是初步的对wordpress分类方法体系进行了探讨,其中更多的wordpress核心逻辑还需要开发者深入研究。