为什么此自定义分类显示在数据库中?

时间:2016-01-23 作者:dotancohen

我创建了一个插件add geographic data to Wordpress. 根据this answer 分类法数据不应存储在数据库中,但它似乎是存储在:

mysql> select * from wp_term_taxonomy where taxonomy=\'geoareas\' limit 10;
+------------------+---------+----------+-------------+--------+-------+
| term_taxonomy_id | term_id | taxonomy | description | parent | count |
+------------------+---------+----------+-------------+--------+-------+
|              953 |     699 | geoareas |             |      0 |     2 |
|              954 |     700 | geoareas |             |    699 |     0 |
|              955 |     701 | geoareas |             |    700 |     0 |
|              956 |     702 | geoareas |             |    700 |     0 |
|              957 |     703 | geoareas |             |    700 |     0 |
|              958 |     704 | geoareas |             |    700 |     0 |
|              959 |     705 | geoareas |             |    700 |     0 |
|              960 |     706 | geoareas |             |    700 |     0 |
|              961 |     707 | geoareas |             |    700 |     0 |
|              962 |     708 | geoareas |             |    700 |     0 |
+------------------+---------+----------+-------------+--------+-------+
10 rows in set (0.00 sec)
Why is that data stored in the database? 删除上的数据的正确方法是什么register_deactivation_hook 自从wp_delete_term() 似乎只是从数据库中删除了术语,而不是整个分类法。我是否需要手动删除数据库中的所有术语Post和术语CustomPostType关联,然后删除对分类法本身的所有引用?或者是否有我应该使用的内部WP功能?显而易见的wp_delete_taxonomy() 不存在!

EDIT: 在我看来taxonomy data 存储在数据库中的存储在wp_term_taxonomy, wp_terms, 和wp_term_relationships 表格。这三个查询是否足以清除taxonomy data 从上的数据库register_deactivation_hook()?

DELETE tr FROM wp_term_taxonomy tt INNER JOIN wp_term_relationships tr ON tt.term_taxonomy_id=tr.term_taxonomy_id WHERE taxonomy=\'geoareas\';

DELETE tt FROM wp_term_taxonomy tt INNER JOIN wp_terms t ON tt.term_id=t.term_id WHERE taxonomy=\'geoareas\';

DELETE FROM wp_term_taxonomy WHERE taxonomy=\'geoareas\';

1 个回复
最合适的回答,由SO网友:Otto 整理而成

分类法“数据”确实存储在数据库中。分类法“定义”不是。

你打电话给register_taxonomy 不是数据,而是数据的定义。您添加的内容(如类别或标记)是数据,是的,它与任何其他分类数据一样进入分类表。

你需要打电话register_taxonomy 每次都是为了让WordPress知道分类法的存在以及如何处理它。分类法中的数据来自数据库。分类法的定义来自代码。

其他:

如何删除用户输入的数据的问题实际上比技术手段更复杂。所有这些都意味着你提到了工作,但真正的问题是你是否应该删除这些数据。也许用户自己在定义这些地理区域时付出了很多努力。如果他们删除并重新安装了你的插件,数据现在就永远消失了,那就太可怕了。

此外,您绝对不应该删除register_deactivation_hook, 因为人们可以很容易地停用和重新激活插件。如果要删除数据,将进行卸载。插件中的php文件(毫不奇怪,它只在实际卸载插件时运行,而不仅仅是停用)。更好的方法可能只是为用户提供一个“擦除所有数据”按钮。将数据控制权交给他们自己。

如果所讨论的数据是不变的,并且是以某种方式自动创建的,那么在新安装后重新生成它可能是有意义的,但对于分类法来说,这种情况非常罕见。可能需要重新考虑您的总体战略。