在插件激活或每个页面加载时插入用于定制分类的术语(init挂钩)

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

考虑一个插件,它添加了一个自定义的分类法,然后用一个大的术语层次结构填充分类法(数十个层次结构术语,在特定的安装中可能会变成数百个)。我明白这一点register_taxonomy() 不在数据库中存储数据,因此it must be used via the init hook 以便在每次页面加载时注册分类。然而wp_insert_term() does store data in the database.

考虑到这一点,是否最好wp_insert_term() 从…起register_activation_hook() 在确保register_taxonomy() 是否已运行?然后仅运行register_taxonomy() 在每个页面加载的“init”挂钩上?

作为参考,我的具体用例是GeoAreas WP插件,目前约有50个术语。我正在开发插件的下一个版本,该版本将支持更多不同的地理区域,并应支持数百个用于大型地理区域(如欧洲或美国)的术语。

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

50相对来说并不多,您应该在插件激活挂钩上创建它们。

100多英镑(刚刚从我屁股里掏出这个数字;)在一些较慢的共享主机上进行您自己的测试)我会创建一个设置页面并从那里初始化DB。原因是用户不希望插件激活需要很长时间,并且可能会认为有什么问题,但在激活时无法发出“这可能需要一分钟”的消息。

无论你决定做什么,都不要在紧急情况下做init 钩子因为它被前端使用,所以只能在与管理相关的钩子上执行。

相关推荐

GET_THE_TERMS与wp_GET_POST_TERMS中的奇怪结果

我正在尝试制作一个面包屑函数,但有一个小问题。。。使用时:$categories = get_the_terms( $post->ID, \'product_cat\' ); 我得到了一个循环中使用的类别数组,等等。唯一的问题是它是按字母顺序排列的。(我希望它按层次顺序排列。)经过一番挖掘,我发现了一种替代方法,即使用wp\\u get\\u post\\u terms(),但我肯定遗漏了一些东西,因为当我使用此方法时:$categories = wp_get_post_terms( $p