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

WordPress Plugin Register Taxonomy for Object Type of Theme Taxonomies

在我的 WordPress 插件中,我使用以下代码为所有已安装的分类自动添加元框:

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 分类法,由子主题使用 register_taxonomy() 在主题的 init 挂钩中安装。

知道为什么我的插件只遗漏了这个分类法 my_plugin_register_taxonomies_for_object_type() 吗?它让我疯狂。我想显示所有已安装的 public 分类法的元框,无论它们是内置的、通过插件安装的还是通过主题安装的。

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

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

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

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

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

我认为使用 wp_loaded 的唯一缺点是 wp_loaded 将 运行 之后执行一些其他操作,例如 widgets_initregister_sidebar,可能还有其他几个。如果其他插件/主题有任何其他回调期望 your post 类型注册这些分类法,and 他们挂钩在 wp_loaded 之前,他们会失败,因为 wp_loaded 运行 在他们之后。在大多数情况下 wp_loaded 可能没问题。