WordPress插件注册主题分类对象类型的分类

时间:2017-06-18 21:53:05

标签: wordpress wordpress-theming action-hook

在我的WordPress插件中,我使用以下代码为所有已安装的Taxonimies自动添加Meta Box:

add_action( 'init', 'my_plugin_register_taxonomies_for_object_type');
function my_plugin_register_taxonomies_for_object_type()
{
  $args = array(
    'public'   => true,
  );
  $output = 'objects';
  $taxonomies = get_taxonomies( $args, $output );
  foreach  ( $taxonomies as $taxonomy )
  {
    register_taxonomy_for_object_type( $taxonomy->name, 'jt_condet_content' );
  }
}

这适用于所有Taxonmies,甚至是通过插件安装的Taxonmies。但是,我注意到缺少一个分类法。这是一个普通的Post Taxonomy,由主题使用register_taxonomy()在主题的init钩子中安装。

我知道为什么我的插件my_plugin_register_taxonomies_for_object_type()错过了这个分类法?它让我疯狂。我想显示所有已安装的公共分类法的元框,无论它们是否已内置,通过插件安装或通过主题安装。

我使用动作挂钩玩了一下,wp_loaded似乎有效,但我不是100%确信这是正确使用的挂钩,还是我很好?

你能否解释一下使用wp_loaded而不是init的缺点?

1 个答案:

答案 0 :(得分:0)

如果您使用init并且子主题也使用init,您可能只需要更改 挂钩的优先级,以确保其运行之后。尝试做:

add_action( 'init', 'my_plugin_register_taxonomies_for_object_type', 20 );

假设他们的主题使用默认值(10),你的主题将在他们的主题之后运行,并且他们的分类法应该可用。

我可以考虑使用wp_loaded的唯一缺点是wp_loaded会在之后运行一些其他操作,例如widgets_initregister_sidebar可能还有其他几个。如果其他插件/主题有任何其他插件/主题要求您的帖子类型注册这些分类,他们在wp_loaded之前挂钩,他们就会失败,因为wp_loaded在他们之后运行。在大多数情况下,wp_loaded可能会很好。