1

在我的 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' );
  }
}

这对所有分类法都非常有效,即使是通过插件安装的分类法。但是,我注意到缺少一个分类法。它是由子主题register_taxonomy()在主题的init钩子中安装的普通帖子分类法。

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

我玩了一点动作钩子,wp_loaded似乎可以工作,但我不能 100% 确信这是正确的钩子,还是我没事?

你能解释一下使用wp_loadedover的缺点init吗?

4

1 回答 1

0

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

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

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

我能想到的唯一缺点wp_loadedwp_loaded它将在其他一些操作之后运行,例如widgets_initregister_sidebar可能还有其他一些操作。如果其他插件/主题有任何其他回调希望您的帖子类型注册这些分类法,并且它们在之前挂钩wp_loaded,它们会失败,因为wp_loaded在它们之后运行。在大多数情况下,这可能wp_loaded会很好。

于 2017-06-18T22:18:26.867 回答